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
但具有一致的迭代顺序(或找到已经提供此功能的现有库)。
添加回答
举报