我正在学习Java可选包装器,为此,我正在阅读以下tutorial
但是我有一个简单的问题未在文章中得到解答:在项目25:避免对Optional使用身份敏感操作时,他们提到从不可选对象,其同步方式如下:
Optional<Product> product = Optional.of(new Product());
synchronized(product) {
...
}
但是没有解释为什么,所以请在这里的任何人向我解释为什么这是一种不好的做法吗?
答案 0 :(得分:4)
因为
[基于值的类]在相等时可以自由替换,这意味着 根据交换相等的任意两个实例x和y
equals()
在任何计算或方法调用中均不应产生 行为上的明显变化”
Source(Oracle)
如果X和Y上有一个固有的锁,则不能随意替换X和Y,因为这样做可能会导致行为发生变化。