Java 11 不可变映射 : create Map. 条目

标签 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).

还有另一种方法,其作用几乎相同,只是它是 true-vararg:

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

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

Map#ofEntries 也在 Map#copyOf 内部使用,但如果没有现有的 Map 实现,我找不到使用它的方法里面有一些条目。 :/

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

➥ 所以,我的问题是:它打算如何使用 Map#ofEntries?或者有一种方法可以在不编写自己的实现或使用匿名类的情况下实例化 Map.Entry

最佳答案

您可以使用静态 Map#entry创建 Map.Entry 的单个不可修改实例的方法:

Map<String, Integer> map = Map.ofEntries(Map.entry("One", 1), Map.entry("Two", 2));

打印map会产生如下输出:

{One=1, Two=2}

关于Java 11 不可变映射 : create Map. 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58660297/

相关文章:

java - 如何替换 Unsafe.objectFieldOffset?

java - 如何解决 java.lang.NoClassDefFoundError : javax/xml/bind/JAXBException

java - JSpinner 值变化监听器

java - 使用 java.lang.ProcessBuilder 在不同主机上运行 shell 脚本

javascript - 定时自动更新 JSP 页面

java - 带有模块的 Java 11 Gradle

java - Spring Rest ErrorHandling @ControllerAdvice/@Valid

java - 正确使用 arrayBaseOffset 和 arrayIndexScale

java - OpenJDK 64 位服务器 VM 警告 : Archived non-system classes are disabled (resin, Ubuntu、OpenJDK 11)

java - 在 jdk 11 中序列化 xml 文档时,LSSerializer 缺少 xmlns 属性(在 jdk 8 中工作正常)