[英]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.of
和List.of
返回不可變的實現,這不是沒有經驗(=尚未落入那個陷阱)開發人員所期望的。
如果您仍然使用番石榴,則ImmutableMap.of
是更具可讀性的選項,但這取決於您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.