报告双大括号初始化

双大括号初始化在非 static 上下文中使用时可能会导致内存泄漏,因为它创建了一个将引用周围对象的匿名类。

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

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

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

示例:


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

在应用快速修复后:


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