Language 初級

匿名クラスでのダイヤモンド演算子

ダイヤモンド演算子が匿名クラスでも使えるようになった。

✕ 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 9(2017年9月)以降

Java 7で<>が導入されましたが、匿名内部クラスでは使用できませんでした。Java 9でこの制限が解消され、右辺で型引数を繰り返す必要がなくなりました。

共有 𝕏 🦋 in