[英]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.