2009-08-12 3 views
5

개인 내부 클래스로 Java 클래스를 컴파일하면 어떤 이유로 익명 클래스가 자동으로 합성 된 것처럼 보입니다. 이 클래스를 재현하기에 충분 :개인 내부 클래스가 예상치 못한 익명 클래스를 합성합니다

컴파일
public class SynthesizeAnonymous { 
    public static void method() { 
     new InnerClass(); 
    } 

    private static class InnerClass {} 
} 

,이 예상 SynthesizeAnonymous.classSynthesizeAnonymous$InnerClass.class 파일을 생성뿐만 아니라 합성 하였다 java.lang.Object의 익명의 하위 클래스에 해당하는 이상한 SynthesizeAnonymous$1.class 파일을 생성합니다. javap을 사용하여 디스 어셈블리를 보면 InnerClass의 기본 생성자가이 익명 형식의 숨겨진 매개 변수를 얻고 new InnerClass()이 호출 될 때 null이 전달됩니다.

이 클래스가 생성되는 이유는 무엇입니까? InnerClass이 정적이 아니더라도 생성되지만 InnerClass이 비공개가 아니거나 InnerClass 인스턴스가 생성되지 않은 경우 생성되지 않습니다. 액세스 제어의 일부 형태입니까? 어떻게 작동합니까?

답변

5

이 클래스는 개인 생성자에 대한 액세스를 제공하기 위해 만들어졌습니다.

자세한 내용은 this question을 참조하십시오.