提问人:kingkong 提问时间:5/14/2020 更新时间:5/15/2020 访问量:385
具有可变成员字段的不可变类
Immutable class with mutable member field
问:
假设我有一个不可变的类,比如 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 类仍可以通过哪些方式保持不可变?
答:
0赞
S.Daineko
5/14/2020
#1
一个绝对不可变的类只能在以下情况下:
- 课程是期末课程
- 所有字段均为最终字段
- 如果字段是一个对象,那么在这个对象中,所有字段也必须是不可变的,并且类本身也必须是最终的。
因此,此类中不应出现二传手。
因此,在您的情况下,实现了部分不变性。
评论
ImmutableAddress
Address