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

问题描述 投票:0回答:1

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

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类仍然可以保持不变的方式有哪些?

java class immutability mutable
1个回答
0
投票

一个绝对不变的类只能是:

  1. 他是一成不变的(最终)
  2. 所有字段均为最终字段
  3. 如果该字段是一个对象,则在该对象内部,所有字段也必须是不可变的,并且必须是最终的。

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

© www.soinside.com 2019 - 2024. All rights reserved.