Yo estoy aprendiendo sobre Java envoltorio opcional, para hacer así que estoy leyendo el siguiente tutorial
sin embargo tengo una simple pregunta que no está respondida en el artículo: en el artículo 25: Evitar el uso de Operaciones de identidad con sensibilidad en Opcionales están mencionar a NUNCA usar un objeto opcional de una manera sincronizada como esto:
Optional<Product> product = Optional.of(new Product());
synchronized(product) {
...
}
pero no hay ninguna explicación de por qué, así que por favor sería cualquiera aquí que me explique por qué esto es una mala práctica ???
Porque
[clases basadas en el valor] son libremente sustituibles cuando son iguales, lo que significa que intercambiando dos casos x e y que son iguales de acuerdo con
equals()
en cualquier cálculo o invocación de método debe producir ningún cambio visible en el comportamiento"
Fuente (Oracle)
No se puede sustituir libremente X e Y si hay un bloqueo intrínseco en uno de ellos, ya que al hacerlo puede producir un cambio en el comportamiento.