java - 如何在引用可变对象时使类不可变?

标签 java immutability

假设我在 java 中有一个名为 Employee 的类,看起来像这样

public class Employee {
    private String empName;
    private int empId;

    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
    public int getEmpId() {
        return empId;
    }
    public void setEmpId(int empId) {
        this.empId = empId;
    }
}

现在我想在一个不可变的类中使用这个对象,假设是一家公司,格式如下。条件是我不能修改

public final class Company {
    final String companyName;
    final Employee employee;

    public Company(String companyName, Employee employee) { 
        this.companyName = companyName; 
        this.employee = employee; 
    } 
    public String getCompanyName() { 
        return companyName; 
    } 
    public Employee getEmployee() { 
        return employee; 
    }
}

所以我的问题是,当我引用可以修改的内部对象时,这是使 Company 类不可变的有效方法吗?

最佳答案

本文引用 https://www.journaldev.com/129/how-to-create-immutable-class-in-java在最终类的构造函数中对 Employee 对象进行深度克隆。这样您就不会使用对象引用。

关于java - 如何在引用可变对象时使类不可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55902839/

相关文章:

java - 为什么 TabbedPane 在应用 setLookAndFeel 时会丢失背景颜色?

java - 如何创建一个树状结构,其中有不同类型的节点,并且每个节点可以引用任何节点?

c# - 为什么字典键应该是不可变的?

java - 这个类是完全不可变的吗?

Scala 不可变地注册 mixin 构造函数结果

javascript - 有什么方法可以防止替换 JavaScript 对象属性?

java - 使用 Spring Data 过滤谓词计数

java - Hibernate二级缓存(TreeCache)——用于子实体

java - 如何知道一个日期范围是否与 Java 中的另一个日期范围相交 - Groovy

redux - 更改数组项的最佳方法是什么?