개인 내부 클래스로 Java 클래스를 컴파일하면 어떤 이유로 익명 클래스가 자동으로 합성 된 것처럼 보입니다. 이 클래스를 재현하기에 충분 :개인 내부 클래스가 예상치 못한 익명 클래스를 합성합니다
컴파일public class SynthesizeAnonymous {
public static void method() {
new InnerClass();
}
private static class InnerClass {}
}
,이 예상 SynthesizeAnonymous.class
및 SynthesizeAnonymous$InnerClass.class
파일을 생성뿐만 아니라 합성 하였다 java.lang.Object
의 익명의 하위 클래스에 해당하는 이상한 SynthesizeAnonymous$1.class
파일을 생성합니다. javap
을 사용하여 디스 어셈블리를 보면 InnerClass
의 기본 생성자가이 익명 형식의 숨겨진 매개 변수를 얻고 new InnerClass()
이 호출 될 때 null
이 전달됩니다.
이 클래스가 생성되는 이유는 무엇입니까? InnerClass
이 정적이 아니더라도 생성되지만 InnerClass
이 비공개가 아니거나 InnerClass
인스턴스가 생성되지 않은 경우 생성되지 않습니다. 액세스 제어의 일부 형태입니까? 어떻게 작동합니까?