2017-01-05 5 views
2

私はjava immutables libraryを使用しています。java org.immutables library:すべて地図上に重複して挿入

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

ImmutableFoo.builder().putBar(1, "asdf").putBar(1, "ghjk").build()重複するキーエラーが発生します。これを避ける方法はありますか?

  • 異なる値の同じキーで発生した場合、私は に新しい値で古い値を上書きしたいと思います。
  • 私は同じ値の同じ キーで発生した場合、私はそれを無視したいと思います。
+0

達成したいことは何ですか? –

+0

古い値を新しい値で上書きしたい/同じ値であれば重複エラーを無視する。 – lf215

+0

デフォルトのハッシュマップを使用してみてください。それはあなたのusecaseに役立ちます –

答えて

2

生成されたビルダーは意図的に間違ったミスタイプやコピー・ペースト・エラーを防ぐ(実際に早期に検出する)ために意図的にこれを行っています。これは、実際にGuavaのImmutableMap.Builder(実際に内部的に使用され、このエラーの原因となる)の動作を模倣しています。

あなたの問題を解決するには、独自のハッシュマップを作成し、任意の順序で任意の数の重複/上書きエントリを入力してから、builder.putAllBar(hashMap)を使用してそれを値オブジェクトの作成中に不変のマップ。

もう1つの選択肢は、Guavaを使用しないようにすることです。生成されたコードでは、標準HashMapが使用され、不変オブジェクトにはCollection.unmodifiableMapで囲まれた防御コピーが作成されます。 JDKが提供するコレクションのみを使用する場合は、@Value.Style(jdkOnly = true)を使用してください(ここのスタイルについて詳しくは、http://immutables.github.io/style.htmlを参照してください)。ビルダーで通常のハッシュ・マップを使用すると、キーの重複エラーを避けることができます。

関連する問題