报告双大括号初始化

与常规初始化相比,双大括号初始化的性能更差,因为它需要加载一个额外的类。

如果 equals() 方法不接受子类作为形参,还可能导致 equals() 比较失败。

在非 static 上下文中使用双大括号初始化可能导致内存泄漏。 这是因为它会定义一个匿名类,当使用 Java 18 之前版本的 javac 编译时,该类将引用周围的对象。

此外,在 Java 9 以前的版本中,双大括号初始化不能与 Diamond 运算符结合使用,因为它与匿名类不兼容。

示例:


  List<Integer> list = new ArrayList<>() {{
    add(1);
    add(2);
  }};

在应用快速修复后:


  List<Integer> list = new ArrayList<>();
  list.add(1);
  list.add(2);