This question already has answers here:
Immutable class?
(9个答案)
2年前关闭。
我正在读的书说它不是一成不变的,因为值是一种引用类型。除了在类内部创建main方法之外,我看不到任何其他方法来更改值。
这意味着您的
(9个答案)
2年前关闭。
public class A {
private int[] values;
public int[] getValues() {
return values;
}
}
我正在读的书说它不是一成不变的,因为值是一种引用类型。除了在类内部创建main方法之外,我看不到任何其他方法来更改值。
最佳答案
这是可变的,因为您可以通过公开的方法更改values
的内容
A obj = new A(...) // values gets filled here
int[] leak = obj.getValues()
leak[0] = 42
这意味着您的
values
属性现在包含已在外部修改的信息。要使其不可变,您应该返回该数组的副本,以确保没有外部代理可以对其进行修改,并且应将其定型为最终状态,以便不能创建任何可以暴露状态并使它再次可变的子类。 :public final class A {
private int[] values;
public int[] getValues() {
return Arrays.copyOf(values);
}
}
关于java - 为什么将此类视为易变的? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45969534/
10-09 20:02