Java 具有可变成员字段的不可变类
假设我有一个不可变的类,比如Employee,其可变成员地址字段的类型如下所示:Java 具有可变成员字段的不可变类,java,class,immutability,mutable,Java,Class,Immutability,Mutable,假设我有一个不可变的类,比如Employee,其可变成员地址字段的类型如下所示: public final class Employee{ private final Integer empId; private final String empName; private final Address address; public Integer getEmpId(){ return empId; } public String
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;
}
}
如上所示,Employee类试图保持不变,但真的是这样吗
我们可以更改Employee对象的地址,从而打破不变性。尽管有可变成员,Employee类仍然可以不可变的方式有哪些?绝对不可变的类只能在以下情况下:
因此,在您的情况下,可以实现部分不可变。绝对不可变类只能在以下情况下实现:
因此,在您的情况下,可以实现部分不变性。简而言之,不可以。您最好的办法是创建一个扩展
地址并隐藏setter功能的不变性地址。真正的不可变性要求当前对象是不可变的(完全是最终的),并且其所有实例变量也是不可变的。简而言之,不是。最好的办法是创建一个扩展地址并隐藏setter功能的不可变地址。真正的不变性要求当前对象是不可变的(完全是最终的),并且它的所有实例变量也是不可变的。
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;
}
}