次の行を試しました:
Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};
しかし、Netbeans 7 はこれを拒否し、エラー メッセージが表示されます'{' expected, ';' expected
。
ソース/バイナリ形式を「JDK 7」に、プラットフォームを「JDK 1.7」に設定しました。他に何かする必要はありますか?
次の行を試しました:
Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};
しかし、Netbeans 7 はこれを拒否し、エラー メッセージが表示されます'{' expected, ';' expected
。
ソース/バイナリ形式を「JDK 7」に、プラットフォームを「JDK 1.7」に設定しました。他に何かする必要はありますか?
この質問で説明されているように、Java 7 も Java 8 もコレクション リテラルをサポートしていません。
不変コレクションのみが必要な場合は、Google のGuavaライブラリを使用できます。ImmutableList
、ImmutableSet
およびImmutableMap
コレクションの作成を容易にするいくつかのオーバーロードされたファクトリ メソッドまたはビルダーさえ持っています。
List<Integer> list = ImmutableList.of(1, 1, 2, 3, 5, 8, 13, 21);
Set<String> set = ImmutableSet.of("foo", "bar", "baz", "batman");
Map<Integer, String> map = ImmutableMap.of(1, "one", 2, "two", 3, "three");
編集
Java 9 には、Guava と同様のコレクション ファクトリ メソッドが追加されています。
List.of(a, b, c);
Set.of(d, e, f, g);
Map.of(k1, v1, k2, v2)
Map.ofEntries(
entry(k1, v1),
entry(k2, v2),
entry(k3, v3),
// ...
entry(kn, vn)
);
オプションで二重ブレースの初期化と組み合わせて、具象マップの実装を定義する必要があります。
Map<Character, Color> map = new HashMap<Character, Color>() {{
put(new Character('r'), Color.red);
put(new Character('b'), Color.black );
}};
トーマスの答えを少し拡張するには... Map はインターフェースであり、関連する具体的な実装 (HashMap、TreeMap、または LinkedHashMap) のいずれかを介してインスタンス化する必要があります。それは良い習慣です。ただし、将来の柔軟性を提供するため、参照変数を特定の具象ではなくインターフェース実装として宣言します。
ただし、コード スニペットに関しては、宣言の代入側で定義されたキーと値のペアがまだ必要だと思います。だから、私は変更します:
Map<Character, Color> map = new HashMap<>() {{
に
Map<Character, Color> map = new HashMap<Character, Color>() {{