23

次の行を試しました:

Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};

しかし、Netbeans 7 はこれを拒否し、エラー メッセージが表示されます'{' expected, ';' expected

ソース/バイナリ形式を「JDK 7」に、プラットフォームを「JDK 1.7」に設定しました。他に何かする必要はありますか?

4

3 に答える 3

52

この質問で説明されているように、Java 7 も Java 8 もコレクション リテラルをサポートしていません

不変コレクションのみが必要な場合は、Google のGuavaライブラリを使用できます。ImmutableListImmutableSetおよび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)
);
于 2012-05-22T16:02:54.527 に答える
11

オプションで二重ブレースの初期化と組み合わせて、具象マップの実装を定義する必要があります。

Map<Character, Color> map = new HashMap<Character, Color>() {{ 
  put(new Character('r'), Color.red);
  put(new Character('b'), Color.black );
}};
于 2012-05-22T16:03:56.970 に答える
0

トーマスの答えを少し拡張するには... Map はインターフェースであり、関連する具体的な実装 (HashMap、TreeMap、または LinkedHashMap) のいずれかを介してインスタンス化する必要があります。それは良い習慣です。ただし、将来の柔軟性を提供するため、参照変数を特定の具象ではなくインターフェース実装として宣言します。

ただし、コード スニペットに関しては、宣言の代入側で定義されたキーと値のペアがまだ必要だと思います。だから、私は変更します:

Map<Character, Color> map = new HashMap<>() {{ 

Map<Character, Color> map = new HashMap<Character, Color>() {{ 
于 2012-05-22T16:29:57.627 に答える