これは、あなたがやりたいことになります。
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};
この文は、親クラスからの唯一の違いは、4つのエントリは、インスタンスの作成時に追加されていることであるHashMapの、匿名のサブクラスを作成します。これは、Javaの世界ではかなり一般的なイディオムです(新しいクラス定義を作成するために議論の余地があります)。
この論争のため、Java 9の時点で便利に地図を構築するための新しいイディオムがあります。スタティックMap.of methodsのファミリです。
のJava 9で
以上あなたは次のようにあなたが必要とするマップを作成することができます大きなマップで
Map<String, Integer> map = Map.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
を、このalternative syntaxが少ないエラーが発生しやすいことがあります
Map<String, Integer> map = Map.ofEntries(
Map.entry("cat", 2),
Map.entry("dog", 1),
Map.entry("llama", 0),
Map.entry("iguana", -1)
);
(これは特にですMap.entryが明示的に参照されるのではなく、静的にインポートされているといいです)。
だけのJava 9+での作業に加えて、これらの新しいアプローチは、以前のものとは全く等価ではありません。
- 、彼らは唯一不変作成するには、
- を使用しているもの地図の実装を指定することはできません。マップ
- 彼らはしかし、これらの違いは、このための適切なデフォルトのアプローチを作り、多くのユースケースでは問題ないはず地図
の匿名のサブクラスを作成しないでください新しいバージョンのJava
実際にそれがありません。ありがとう。 – WildBamaBoy
そして、これが何をしているのかについての説明があります。あなたは正しい@Luigi http://techpolesen.blogspot.com/2007/08/java-initializers-add-elements-to.html –
うーん...ダブル括弧構文は、一般的にI'LL、良いスタイル –