首页 > 解决方案 > 如何在 Map.of 工厂中保留插入顺序?

问题描述

Java 9 提供Map.of()了轻松创建具有固定值的地图的功能。

问题:我想创建一个保留插入顺序的地图,例如LinkedHashMap. 那家工厂可以吗?至少map.of()不保留顺序...

标签: javahashmapjava-9factory-method

解决方案


确实没有工厂方法LinkedHashMap::of,并且 aMap本身没有订单,所以我认为它的唯一方法是构建 aLinkedHashMap如果你真的需要一个。

顺便说一句,来自JEP 本身

具体集合类(例如,ArrayList、HashSet)上的静态工厂方法已从该提案中删除...

还有一个问题,就是类上的静态方法是由子类继承的。假设要添加一个静态工厂方法 HashMap.of()。由于 LinkedHashMap 是 HashMap 的子类,因此应用程序代码可以调用 LinkedHashMap.of()。这最终会调用 HashMap.of(),这完全不是人们所期望的!

这里的要点是static方法是继承的,但不可覆盖,因此如果将这样的方法添加到HashMap它可能不会在LinkedHashMap.

如果可以使用guava,则可以使用ImmutableMap记录为:

一个不可变的、基于哈希的 Map 具有可靠的用户指定的迭代顺序......


推荐阅读