有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使非原语类成员不可变

我这里有一个小问题,请告诉我这是对还是错

使类不可变时,我有一个非原语成员。如何使该成员不可变。而在它自己的实现中,它并不是一成不变的

public Class A{
private final int  immutableInt;
private final String immutableString;
private final Employee toBeMadeImmutable

// individual getters

}

不,如果使用“toBeMadeImmutable”的getter,我将获得它的对象,我可以对该对象执行任何操作,因此它将是可变的,这不是必需的

如何实现非原语成员的不变性


共 (3) 个答案

  1. # 1 楼答案

    Java不提供对不变性的内置支持

    您可以通过使字段的setters private不可变并仅公开其getters as public方法来使字段不可变

    此外,不能通过将变量声明为final来实现不变性。 通过将变量声明为final,可以指定不更改引用所指向的对象。您仍然可以更改引用所指向的对象的状态(通过更改其字段)

  2. # 2 楼答案

    如果其中一个字段不是不可变的,则很难使对象不可变。如果你复制了一个防御性副本,就有可能接近:

    Employee getEmployee() {
        return new Employee(toBeMadeImmutable);
    }
    

    其中,构造函数使用相同的值创建新员工

  3. # 3 楼答案

    在这种情况下,您可以做的是提供toBeMadeImmutable的克隆,这样就没有人可以修改原始员工