非最终参数或返回的对象可以使对象变为可变吗?
通过更改此内容会有什么不同:
public final class MyImmutableClass {
public final MyObject doStuff(final SomeObject someObject) {
...
}
}
到此:
public final class MyImmutableClass {
public MyObject doStuff(SomeObject someObject) {
...
}
}
目标是使MyImmutableClass
真正不变。
应用更改后,MyImmutableClass
仍然被认为是不可变的吗?如果不是,通过进行更改可以改变哪种状态?
答案 0 :(得分:3)
首先,类永远不会是不可变的,类的实例可能是。接下来,
public final MyObject doStuff(final SomeObject someObject) {
在此处,您无法将引用someObject
更改为指向方法内的SomeObject
的其他实例。这可以保证您始终使用调用者传递的参数。
接下来,方法签名中的final
确保无法覆盖它(如果类本身标记为final
,则这是多余的。)