繁体   English   中英

如何使非原始类成员不可变

[英]how to make non primitive class member immutable

我在这里有一个小问题,请告诉我我是否认为这是对的还是不对的。

同时使类不可变,我有一个非原始成员。 我如何才能使该成员不可变。而在其自己的实现中,它不是不可变的,例如

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

// individual getters

}

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

非原始成员如何实现不变性

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

您可以通过将字段的setters private getters as public setters private并将其获取setters private getters as public方法公开,从而使字段不可变。

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

如果您的字段之一是不可变的,将很难使您的对象不可变。 如果您制作防御性副本,可能会接近:

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

构造函数创建具有相同值的新Employee的地方。

在这种情况下,您可以做的是提供toBeMadeImmutable的副本,以便没有人可以修改原始Employee。

暂无
暂无

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

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