Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不可变的最终参数和返回_Java - Fatal编程技术网

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?