Java 不可变的最终参数和返回
非最终参数或返回的对象能否使对象可变 改变这一点会有什么不同:Java 不可变的最终参数和返回,java,Java,非最终参数或返回的对象能否使对象可变 改变这一点会有什么不同: public final class MyImmutableClass { public final MyObject doStuff(final SomeObject someObject) { ... } } 为此: public final class MyImmutableClass { public MyObject doStuff(SomeObject someObject) { ... } }
public final class MyImmutableClass {
public final MyObject doStuff(final SomeObject someObject) {
...
}
}
为此:
public final class MyImmutableClass {
public MyObject doStuff(SomeObject someObject) {
...
}
}
当目标是使MyImmutableClass
真正不可变时
应用更改后,MyImmutableClass
是否仍被视为不可变?如果不是,什么状态可以通过更改来更改?首先,类从来都不是不可变的,类的实例可以是不可变的。其次,
public final MyObject doStuff(final SomeObject SomeObject){
在这里,您不能将引用someObject
更改为指向方法内部的someObject
的其他实例。这保证您始终使用调用方传递的参数
接下来,方法签名中的final
确保它不能被重写(如果类本身被标记为final
,这是多余的)首先,类从来都不是不可变的,类的实例可以是不可变的。接下来
public final MyObject doStuff(final SomeObject SomeObject){
在这里,您不能将引用someObject
更改为指向方法内部的someObject
的其他实例。这保证您始终使用调用方传递的参数
接下来,方法签名中的final
确保它不能被重写(如果类本身被标记为final
,这是多余的)首先,类从来都不是不可变的,类的实例可以是不可变的。接下来
public final MyObject doStuff(final SomeObject SomeObject){
在这里,您不能将引用someObject
更改为指向方法内部的someObject
的其他实例。这保证您始终使用调用方传递的参数
接下来,方法签名中的final
确保它不能被重写(如果类本身被标记为final
,这是多余的)首先,类从来都不是不可变的,类的实例可以是不可变的。接下来
public final MyObject doStuff(final SomeObject SomeObject){
在这里,您不能将引用someObject
更改为指向方法内部的someObject
的其他实例。这保证您始终使用调用方传递的参数
接下来,方法签名中的
final
确保它不能被重写(如果类本身被标记为final
,这是多余的)IIRC生成类最终版本不会影响可变性。它只是意味着该类不能是?IIRC生成类最终版本的子类可能的副本不会影响可变性。它只是意味着该类不能是?IIRC生成类最终版本的子类可能的副本不会影响可变性。它只是意味着该类不能是子类IIRC的lassedpossible duplicate使类成为final不会影响可变性。它只是意味着该类不能是的子类Possible duplicate?