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() {
    }
  }