[英]Return immutable copy of mutable object from method
我有一些封閉的組件正在處理一些 XML 對象。 我需要在此組件之外公開此對象,但我不想允許在我的組件之外對其進行更改。 我怎樣才能完成這個?
確保您的對象具有復制構造函數,允許您制作類的深度克隆副本。
然后在返回對象時調用它,例如
SomeClass instance = // ....
public SomeClass getInstance() {
return new SomeClass(instance);
}
這不會使返回的對象不可變。 但這並不需要——您只是不希望外部代碼更改您的數據副本。
好吧,這是訪問級別的擁護者;-)
如果您只是希望阻止調用者進行更改,這並不意味着它必須是不可變的 [在您的包中] - 它只是意味着它不應該有 [public] 方式來改變它:) 我'我實際上越來越喜歡返回一個有限的公共接口。
例如:
// Option A with a "limiting public interface"
public interface Awesome {
public String getText();
}
class MyAwesome implements Awesome {
public String getText() {
// ..
}
// Option B is to make setText non-public
public void setText() {
// ..
}
}
然后你的代碼可以返回Awesome
,它不會[直接]提供改變對象的方法。
我認為您需要創建另一個不可變的類,將您的對象作為參數(可能在構造函數中)。 那么你應該只公開你的新類的實例。
以下是使對象不可變的一些技巧:不可變的類?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.