二重波括弧の初期化では追加のクラスをロードする必要があるため、通常の初期化に比べてパフォーマンスが悪化します。
同様に、equals() メソッドがサブクラスをパラメーターとして受け入れない場合、equals() 比較で失敗する可能性があります。
非 static のコンテキストで二重波括弧を使用して初期化すると、メモリリークが発生する場合があります。 Java 18 以前の javac でコンパイルすると、外側のオブジェクトを参照する匿名クラスが定義されるのがその原因です。
また、Java 9 より古いバージョンでは二重波括弧の初期化をダイヤモンド演算子と組み合わせることはできませんでした。匿名クラスと互換性がなかったためです。
例:
List<Integer> list = new ArrayList<>() {{
add(1);
add(2);
}};
クイックフィックス適用後:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);