不可变的最终参数和返回

时间:2015-09-04 09:45:43

标签: java

非最终参数或返回的对象可以使对象变为可变吗?

通过更改此内容会有什么不同:

public final class MyImmutableClass {

public final MyObject doStuff(final SomeObject someObject) {
    ...
}

}

到此:

public final class MyImmutableClass {

public MyObject doStuff(SomeObject someObject) {
    ...
}

}

目标是使MyImmutableClass真正不变。

应用更改后,MyImmutableClass仍然被认为是不可变的吗?如果不是,通过进行更改可以改变哪种状态?

1 个答案:

答案 0 :(得分:3)

首先,永远不会是不可变的,类的实例可能是。接下来,

public final MyObject doStuff(final SomeObject someObject) {

在此处,您无法将引用someObject更改为指向方法内的SomeObject的其他实例。这可以保证您始终使用调用者传递的参数。

接下来,方法签名中的final确保无法覆盖它(如果类本身标记为final,则这是多余的。)