簡體   English   中英

@AutoValue 類中是否需要不可變的 collections ?

[英]Do I need immutable collections in @AutoValue classes?

使用@AutoValue 生成的 class 是否不可變? 我可以使用它來代替自己創建 class 並確保它可以注釋@Immutable 嗎?

AutoValue 被宣傳為“為 Java 7+ 生成的不可變值類”。 但是如果使用可變字段,則 AutoValue class 不是@Immutable,即不遵循注釋 javadoc中定義的契約。 這在Autovalue docs中明確指出。

此外,如果您在作為集合的 AutoValue class 中聲明一個屬性,例如

    public abstract Map<String, ImmutableThing> thingMap();

結果字段不一定是不可變的,它取決於您傳遞給構造函數的 Map 的實現。 對於不可變性,您想改用 ImmutableMap 之類的東西,這會強制您在構造函數中傳入 ImmutableMap:

    public abstract ImmutableMap<String, ImmutableThing> thingMap();

在我看來,生成的 AutoValue 代碼可以自動使像這樣的集合屬性不可變。

我想@AutoValue 設計師的設計有充分的理由,但缺乏不變性是令人驚訝的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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