我正在编写一个不可变类。其中一个实例是另一个可变类的对象。我怎样才能防止修改该实例的状态。
最佳答案
如果您为所有 getter 提供委托(delegate),但不为字段本身提供 getter。例如:
public final class Foo {
private Bar bar;
public String getBarField1() {
return bar.getBarField1();
}
public String getBarField2() {
return bar.getBarField2();
}
}
但是有一点需要考虑——字段是如何创建的。如果它是在构造函数中传递的,那么您必须创建它的副本而不是获取传递的对象,否则创建代码将引用 Bar
实例并能够修改它。
关于Java不可变类疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894628/