【发布时间】:2020-05-14 15:43:39
【问题描述】:
假设我有一个不可变类,比如 Employee,它有一个 Address 类类型的可变成员地址字段,如下所示:
public final class Employee{
private final Integer empId;
private final String empName;
private final Address address;
public Integer getEmpId(){
return empId;
}
public String getEmpName(){
return empName;
}
public Address getAddress(){
return address;
}
}
public class Address {
private String firstLine;
private String secondLine;
private Integer pinCode;
public String getFirstLine() {
return firstLine;
}
public void setFirstLine(String firstLine) {
this.firstLine = firstLine;
}
public String getSecondLine() {
return secondLine;
}
public void setSecondLine(String secondLine) {
this.secondLine = secondLine;
}
public Integer getPinCode() {
return pinCode;
}
public void setPinCode(Integer pinCode) {
this.pinCode = pinCode;
}
}
如上所示,Employee 类试图保持不变,但真的是这样吗?
我们可以更改 Employee 对象的地址,从而打破不变性。尽管有可变成员,Employee 类仍然可以通过哪些方式保持不可变?
【问题讨论】:
-
简而言之,没有。最好的办法是创建一个扩展
Address并隐藏 setter 功能的ImmutableAddress。 -
没有。真正的不变性要求 current 对象是不可变的(完全是最终的),并且它的所有实例变量也是不可变的。
标签: java class immutability mutable