java org.immutables库:映射中的所有重复插入

java org.immutables库:映射中的所有重复插入,java,hashmap,immutables-library,Java,Hashmap,Immutables Library,我在用电话 @Value.Immutable 公共接口{ 映射getBar(); } ImmutableFoo.builder().putBar(1,“asdf”).putBar(1,“ghjk”).build()会导致重复的密钥错误。有没有办法避免这种情况 如果我偶然发现同一个键具有不同的值,我希望 用新值覆盖旧值 如果我遇到同样的事情 键具有相同的值,我想忽略它 生成的生成器有意这样做,以防止(实际上是早期检测)意外的打字错误和复制粘贴错误。在这种情况下,它实际上模仿了Guava的Imm

我在用电话

@Value.Immutable
公共接口{
映射getBar();
}
ImmutableFoo.builder().putBar(1,“asdf”).putBar(1,“ghjk”).build()
会导致重复的密钥错误。有没有办法避免这种情况

  • 如果我偶然发现同一个键具有不同的值,我希望 用新值覆盖旧值
  • 如果我遇到同样的事情 键具有相同的值,我想忽略它

生成的生成器有意这样做,以防止(实际上是早期检测)意外的打字错误和复制粘贴错误。在这种情况下,它实际上模仿了Guava的
ImmutableMap.Builder
(它实际上是内部使用的,并负责此错误)的行为

为了解决您的问题,处理此问题的最佳方法是创建您自己的哈希映射,用任意顺序的值和任意数量的重复/覆盖项填充它,然后使用
builder.putAllBar(hashMap)
应用它,并在值对象创建期间将其转换为不可变映射


另一个选项是选择不使用Guava,然后生成的代码将使用常规的
HashMap
,并将为不可变对象创建包装在
Collection.unmodifiableMap
中的防御性副本。使用
@Value.Style(jdkOnly=true)
仅使用JDK提供的集合(在此处阅读有关样式的更多信息:)。通过在生成器中使用常规哈希映射,可以避免出现重复的键错误。

您希望实现什么?我想用新值覆盖旧值/如果重复的值相同,则忽略重复的错误。可能可以尝试使用默认哈希映射?这对你的用例很有帮助
@Value.Immutable 
public interface Foo {
    Map<Integer, String> getBar(); 
}