簡體   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