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