繁体   English   中英

具有可变成员字段的不可变 class

[英]Immutable class with mutable member field

假设我有一个不可变的 class 说 Employee 具有类型为 Address class 的可变成员地址字段,如下所示:

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 class 试图保持不变,但真的是这样吗?

我们可以更改员工 object 的地址,从而打破不变性。 尽管有可变成员,Employee class 仍然可以不可变的方式是什么?

一个绝对不可变的 class 只能是:

  1. class 是最终版本
  2. 所有字段都是最终的
  3. 如果该字段是 object,则在此 object 内,所有字段也必须是不可变的,并且 class 本身也必须是最终的。

因此,setter 不应该出现在此类中。

因此,在您的情况下,实现了部分不变性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM