簡體   English   中英

ImmutableMap.of 與 Java Map.of

[英]ImmutableMap.of vs Java Map.of

我已經看到 ImmutableMap.of 用於創建不可變的地圖對象。 同時,Java 提供了 Map.of,它也創建了不可變的地圖。 使用 ImmutableMap.of 代替 Java 中的 Map.of 有什么好處嗎?

編輯:我不是在問地圖和不可變地圖之間的區別。 我在問為什么有些人更喜歡 ImmutableMap.of 而不是 Map.of,它也創建了 immutableMap。

Map.of的一個可能的缺點是它返回Map ,它提供了許多記錄在案的方法,以在地圖不可變的情況下拋出UnsupportedOperationException ——這可能被認為是 API 設計中的一個缺點。 沒有可靠的方法讓使用Map的代碼知道其中任何一個是否有效。

這個決定有充分的理由,例如能夠在不破壞向后兼容性的情況下利用現有的代碼庫。 但這是以類型系統無法幫助傳達給定方法是否可以接受(或需要)不可變或可變映射的代價。 這留給文檔。

番石榴ImmutableMap也實現了Map ,但至少不支持的方法被標記為已棄用。可以說仍然不理想,但是......權衡)

我假設您在談論com.google.common.collect.ImmutableMap 根據 javadoc ,自 2.0 以來一直在 guava 中,這真的很舊(我只能找到2010 年的版本 3.0 ,所以 2.0 在那之前)。

Map.of在 2017 年 9 月發布的java 9 中引入。 這意味着在 java 9 之前只有第一個選項可用,但您需要一個庫。

由於此功能最終通過 java 9 集成到 java 本身中,並且您不再需要外部庫,因此我認為Map.of是可取的。

但是,就可讀性而言,我一直討厭Map.ofList.of返回不可變的實現,這不是沒有經驗(=尚未落入那個陷阱)開發人員所期望的。

如果您仍然使用番石榴,則ImmutableMap.of是更具可讀性的選項,但這取決於您。

暫無
暫無

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

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