3 回答

TA貢獻1852條經驗 獲得超1個贊
LinkedHashMap::of
確實沒有工廠方法,而且 aMap
本身沒有訂單,所以我認為它的唯一方法是構建一個,LinkedHashMap
如果你真的需要的話。
順便說一句,來自JEP 本身:
具體集合類(例如,ArrayList、HashSet)上的靜態工廠方法已從該提案中刪除...
還有一個問題,就是類上的靜態方法是由子類繼承的。假設要添加一個靜態工廠方法 HashMap.of()。由于 LinkedHashMap 是 HashMap 的子類,因此應用程序代碼可以調用 LinkedHashMap.of()。這最終會調用 HashMap.of(),這完全不是人們所期望的!
這里的static
要點是方法是繼承的,但不是可HashMap
覆蓋的,因此如果將這樣的方法添加到它可能不會在LinkedHashMap
.
如果可以使用guava
,則可以使用ImmutableMap
記錄為:
一個不可變的、基于哈希的 Map,具有可靠的用戶指定的迭代順序......

TA貢獻1818條經驗 獲得超8個贊
正如Map
(重點是我的)的 Java apidoc 中所述:
不可修改的地圖
的
Map.of
,Map.ofEntries
和Map.copyOf
靜態工廠方法提供了一種方便的方法來創建不可修改的地圖。這些方法創建的 Map 實例具有以下特點:
...
映射的迭代順序未指定并且可能會發生變化。
...
不幸的是,Java API 中沒有等效的便捷方法來創建LinkedHashMap
. 如果您想要一致的迭代順序,那么您將需要手動創建LinkedHashMap
并填充它(并且 - 如果需要 - 使用 包裝它Collections.unmodifiableMap
)。
考慮創建您自己的便捷方法,該方法等效于Map.of
但具有一致的迭代順序(或找到已經提供此功能的現有庫)。
添加回答
舉報