ImmutableMap.of 与 Java Map.of

use*_*111 2 java collections guava

我已经看到 ImmutableMap.of 用于创建不可变的映射对象。同时,Java 提供了 Map.of,它也可以创建不可变的映射。使用 ImmutableMap.of 代替 Java 中的 Map.of 有什么优势吗?

编辑:我不是在问地图和不可变地图之间的区别。我问为什么有些人更喜欢 ImmutableMap.of 而不是 Map.of ,后者也创建了 immutableMap 。

Hul*_*ulk 10

一个可能的缺点Map.of是它返回Map,它提供了许多记录在案的方法,以便UnsupportedOperationException在映射不可变的情况下抛出 - 这可能被认为是 API 设计中的一个缺点。代码消耗者没有可靠的方法Map来知道其中任何一个是否有效。

做出这个决定有充分的理由,例如能够利用现有的代码库而不破坏向后兼容性。但这的代价是类型系统无法帮助传达给定方法是否可以接受(或需要)不可变或可变映射。这留给文档处理。

番石榴ImmutableMap也实现了Map,但至少不支持的方法被标记为已弃用。可以说仍然不理想,但是......权衡)

  • “ImmutableMap”还提供了许多额外的保证,包括确定性的迭代顺序。 (4认同)
  • 这。还有一些更细微的差异,例如“Map.of()”在“map.containsKey(null)”上抛出 NPE,而“ImmutableMap”始终返回“false”。 (3认同)