static 内部クラスに安全に置換できる匿名クラスを報告します。 匿名クラスは外側のインスタンスか、それを囲むメソッドのローカル変数を明示的に参照していない場合に static 内部クラスにできます。

static の内部クラスは、外部インスタンスへの暗黙的な参照を維持しません。 これにより、一般的なメモリリークの原因を防ぎ、クラスインスタンスごとのメモリ消費量を削減しています。

Java 18 以降はこの参照が使用されていない場合、シリアル化可能な匿名クラスのみが外部インスタンスへの暗黙的な参照を保持します。 そのため、モジュールの言語レベルが Java 18 以降の場合、 このインスペクションはシリアル化可能なクラスのみを報告します。

クイックフィックスを使用すると、匿名クラスが名前付き static 内部クラスに抽出されます。

例:


  void sample() {
    Thread thread = new Thread(new Runnable() {
      @Override
      public void run() {
      }
    });
  }

クイックフィックス適用後:


  void sample() {
    Thread thread = new Thread(new Task());
  }

  private static class Task implements Runnable {
    @Override
    public void run() {
    }
  }