[google/guava]ImmutableMap.ofEntries()

2024-07-16 434 views
4

目前,Immutable.of()仅支持最多 5 个键值对。我建议添加一个ImmutableMap.ofEntries(Entry<K, V>...)类似于Java 9 中出现的Map.ofEntries()的新方法。这将允许创建ImmutableMap任意数量的键值对。

我还建议将ImmutableMap.entryOf(K, V)其公开,以便可以用于ofEntries()

ImmutableMap.ofEntries(
    ImmutableMap.entryOf("a", 1),
    ImmutableMap.entryOf("b", 2));

回答

1

为什么这种模式比仅仅使用更好Builder

new ImmutableMap.Builder<String, Integer>()
    .put("a", 1)
    .put("b", 2)
    .build();
8

+1 至 @dimo414

此外,如果您由于某种原因拥有条目实例,那么如何:( new ImmutableMap.Builder<K, V>().put(entry).put(entry).put(entry).build(); 或者.putAll(Iterable<Entry<K, V>>)如果您有一个可迭代的条目)

回复。ImmutableMap.entryOf(K, V),请参阅Maps.immutableEntry(K, V)Map.entry(K, V)(在 Java 9+ 中)。

4

使用起来ImmutableMap.Builder很麻烦。ImmutableMap.ofEntries则更加直接:

ImmutableMap.ofEntries(immutableEntry("a", 1), immutableEntry("b", 2));
new ImmutableMap.Builder<String, Integer>().put("a", 1).put("b", 2).build();

第一个例子中的繁琐部分要少得多。此外,它不需要类型参数。

1

怎么样ImmutableMap.copyOf(Maps.ofEntries(...))

1

我不得不反对这ofEntries()比构建器模式涉及的仪式更少。值得注意的是,你假设了静态导入immutableEntry()(只有通过阅读文档才能被调用者发现),并构造Entry将立即被丢弃的对象。流畅的 API 更易于使用(IDE 可以提供自动完成功能),而构建器更标准且不足为奇。

ImmutableMap.of()虽然我同意在超过五个键值对的构建器之间进行切换有点令人讨厌,但生成的代码比更长的of(...)过载更清晰。

1

其中ImmutableMap.Builder.put()ImmutableMap.of()还有Entry被丢弃的临时对象。