簡體   English   中英

從方法返回可變對象的不可變副本

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM