有效的不可变对象有意义吗?

Noo*_*z42 10 java immutability thread-safety

Java Concurrency In Practice一书中,它解释了"有效不可变"对象与可变对象并发性的优点.但它没有解释"有效不可变"对象在真正不可变对象上提供的优势.

我不明白:在你决定安全地发布一个"有效不可变"的对象的那一刻,难道你不能总是构建一个真正不可变的对象吗?(而不是做你的"安全发布",你建立一个真正不可变的对象,就是这样)

当我正在设计类时,我无法看到我无法始终构建一个真正不可变对象的情况(如果需要使用委托等来构建其他包装对象,当然这些对象本身就是不可改变的)我此刻决定"安全地发布".

那么"有效不可变"的对象和他们的"安全出版物"只是一个糟糕的设计或糟糕的API的情况?

你会在哪里被迫使用一个有效的不可变对象,并被迫安全地发布它,你无法建立一个更优越的真正不可变对象?

Col*_*inD 9

是的,在某些情况下它们是有道理的.一个简单的例子是当你想要一些属性被懒惰地生成并缓存时,如果它从未被访问过,你可以避免产生它的开销.String是一个有效不可变类的例子(使用其哈希码).