Eu estou aprendendo sobre java invólucro opcional, para fazê-lo eu estou lendo o seguinte tutorial
no entanto eu tenho uma pergunta simples que não é respondida no artigo: no artigo 25: Evite o uso de Operações Identidade-sensíveis em Opcionais estão mencionando a NUNCA usar um objeto opcional de forma sincronizada assim:
Optional<Product> product = Optional.of(new Product());
synchronized(product) {
...
}
mas não há nenhuma explicação por que, por isso, que qualquer um aqui me explicar por que esta é uma prática ruim ???
Porque
[classes baseadas em valor] são livremente substituíveis quando iguais, o que significa que permutando dois casos que x e y são iguais de acordo com
equals()
em qualquer computação ou método invocação devem produzir nenhuma mudança visível no comportamento"
Fonte (Oracle)
Você não pode substituir livremente X e Y se houver um bloqueio intrínseco em um deles, pois isso pode produzir uma mudança de comportamento.