Java 11不可变地图:创建Map.Entry

Xob*_*tun 2 java java-11

在Java 11中,有一组静态方法java.util.Map可以实例化AbstractImmutableMap

static <K, V> Map<K, V> of(K k1, V v1) { return new Map1(k1, v1); }
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) { return new MapN(new Object[]{k1, v1, k2, v2}); }
// ... some more "vararg" static methods until 10 pairs (inclusive).
Run Code Online (Sandbox Code Playgroud)

还有另一种方法,除了true-vararg之外,几乎相同:

static <K, V> Map<K, V> ofEntries(Map.Entry<? extends K, ? extends V>... entries) { /* impl here */ }
Run Code Online (Sandbox Code Playgroud)

我想使用后一种方法,因为它允许将条目数扩展到远远超过十个。问题是,我不知道如何创建Map.Entry。它在不同的Maps中有很多实现,但是没有new运算符或静态构造方法,但是Map有。

Map#ofEntries还在内部使用Map#copyOf,但是如果没有已经存在Map一些条目的现有实现,我就找不到使用它的方法。:/

我尝试搜索它,但是找不到答案。

?因此,我的问题是:它打算如何使用Map#ofEntries?还是有一种Map.Entry无需编写我自己的实现或使用匿名类即可实例化的方法?

Jac*_* G. 6

您可以使用该static Map#entry方法创建以下单个不可修改的实例Map.Entry

Map<String, Integer> map = Map.ofEntries(Map.entry("One", 1), Map.entry("Two", 2));
Run Code Online (Sandbox Code Playgroud)

打印map可以产生以下输出:

{One=1, Two=2}
Run Code Online (Sandbox Code Playgroud)

  • 我不敢相信我是那个盲人!谢谢!可能是我在寻找`Map.Entry#of`,而不是简单得多的`Map#entry`。:D (2认同)
  • (您可能还想使用“import static”来使其更短。) (2认同)