Guavaは、マップを初期化するための素敵なショートカットを提供します。ただし、マップが9つのエントリに初期化されると、次のコンパイラエラー(Eclipse Indigo)が発生します。
タイプImmutableMap
のメソッドof(K, V, K, V, K, V, K, V, K, V)
は、引数(String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String)
には適用されません
ImmutableMap<String,String> myMap = ImmutableMap.of(
"key1", "value1",
"key2", "value2",
"key3", "value3",
"key4", "value4",
"key5", "value5",
"key6", "value6",
"key7", "value7",
"key8", "value8",
"key9", "value9"
);
メッセージはそれを言うように見えます
ImmutableMapの最大サイズは、キー、値の4ペアです。
明らかにこれは事実ではありませんが、イニシャライザのサイズを増やすために何をすべきかわかりません。
誰かが不足しているものを教えてもらえますか?
エラーメッセージには5つのK, V
ペアのみが含まれ、合計10個の引数があることに注意してください。これは仕様によるものです。 ImmutableMapクラスは6つの異なるof()
メソッドを提供し、0〜5つのキーと値のペアを受け入れます。 K
とV
は異なる型になる可能性があるため、varagsパラメーターを受け入れるof(...)
オーバーロードはありません。
ImmutableMap.Builder
が必要です:
ImmutableMap<String,String> myMap = ImmutableMap.<String, String>builder()
.put("key1", "value1")
.put("key2", "value2")
.put("key3", "value3")
.put("key4", "value4")
.put("key5", "value5")
.put("key6", "value6")
.put("key7", "value7")
.put("key8", "value8")
.put("key9", "value9")
.build();
マップが短い場合、次のことができます。
ImmutableMap.of(key, value, key2, value2); // ...up to five k-v pairs
それよりも長い場合:
ImmutableMap.builder()
.put(key, value)
.put(key2, value2)
// ...
.build();
「put」は 非推奨 になりました。使用を控え、代わりに.ofを使用してください
ImmutableMap<String, String> myMap = ImmutableMap.of(
"city1", "Seattle",
"city2", "Delhi"
);