java org.immutables library:地图中的所有重复插入

时间:2017-01-05 04:40:31

标签: java hashmap immutables-library

我正在使用java immutables library

@Value.Immutable 
public interface Foo {
    Map<Integer, String> getBar(); 
}

ImmutableFoo.builder().putBar(1, "asdf").putBar(1, "ghjk").build()会导致重复键错误。有什么方法可以避免这种情况吗?

  • 如果我碰巧使用不同价值的同一把钥匙,我愿意 用新值覆盖旧值。
  • 如果我发生在同一个人身上 具有相同值的键,我想忽略它。

1 个答案:

答案 0 :(得分:2)

生成的构建器有意这样做是为了防止(实际上及早发现)意外错误输入和复制粘贴错误。在这里,它实际上模仿了Guava bash的行为(实际上是在内部使用并且是造成此错误的原因)。

要解决您的问题,处理此问题的最佳方法是创建您自己的哈希映射,以任意顺序填充值,并使用任意数量的重复/覆盖条目,然后使用ImmutableMap.Builder应用它在值对象创建过程中将其转换为不可变映射。

另一种选择是选择不使用Guava,然后生成的代码将使用常规builder.putAllBar(hashMap),并将为HashMap创建用于不可变对象的防御拷贝。使用Collection.unmodifiableMap仅使用JDK提供的集合(请在此处阅读有关样式的更多信息:http://immutables.github.io/style.html)。通过在构建器中使用常规哈希映射,可以避免出现重复键错误。