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