匿名クラスでのダイヤモンド演算子
ダイヤモンド演算子が匿名クラスでも使えるようになった。
コード比較
✕ Java 7/8
Map<String, List<String>> map =
new HashMap<String, List<String>>();
// anonymous class: no diamond
Predicate<String> p =
new Predicate<String>() {
public boolean test(String s) {..}
};
✓ Java 9+
Map<String, List<String>> map =
new HashMap<>();
// Java 9: diamond with anonymous classes
Predicate<String> p =
new Predicate<>() {
public boolean test(String s) {..}
};
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
一貫したルール
ダイヤモンドはコンストラクタでも匿名クラスでも同様に使えます。
冗長性の削減
型引数は左辺で一度だけ記述し、繰り返す必要はありません。
DRY原則
コンパイラがすでに型を知っているのに、なぜ2度書くのでしょうか?
旧来のアプローチ
型引数の繰り返し
モダンなアプローチ
ダイヤモンド <>
JDKバージョン
9
難易度
初級
JDKサポート
匿名クラスでのダイヤモンド演算子
利用可能
匿名クラスでのダイヤモンドはJDK 9(2017年9月)以降
仕組み
Java 7で<>が導入されましたが、匿名内部クラスでは使用できませんでした。Java 9でこの制限が解消され、右辺で型引数を繰り返す必要がなくなりました。
関連ドキュメント