【问题标题】:immutable final arguments and returns不可变的最终参数和返回
【发布时间】:2015-11-30 10:15:10
【问题描述】:

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

改变这个有什么不同:

public final class MyImmutableClass {

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

}

到这里:

public final class MyImmutableClass {

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

}

当目标是使 MyImmutableClass 真正不可变时。

应用更改后,MyImmutableClass 是否仍被视为不可变?如果不是,通过更改可以更改什么状态?

【问题讨论】:

标签: java


【解决方案1】:

首先,一个绝不是不可变的,一个类的实例可以是。接下来,

public final MyObject doStuff(final SomeObject someObject) {

在这里,您不能将引用 someObject 更改为指向方法内 SomeObject 的其他实例。这保证了您始终使用调用者传递的参数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2022-10-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多