Joh*_*eek 6 java private language-implementation anonymous-class
当您使用私有内部类编译Java类时,似乎匿名类由于某种原因自动合成.这个类足以重现它:
public class SynthesizeAnonymous {
public static void method() {
new InnerClass();
}
private static class InnerClass {}
}
Run Code Online (Sandbox Code Playgroud)
编译时,这会生成预期的SynthesizeAnonymous.class和SynthesizeAnonymous$InnerClass.class文件,但它也会生成一个奇怪的SynthesizeAnonymous$1.class文件,该文件对应java.lang.Object于合成的匿名子类.如果你看一下反汇编javap,看来默认的构造函数InnerClass获得了这个匿名类型的隐藏参数,并null在new InnerClass()调用时传递给它.
为什么要创建这个类?即使InnerClass它不是静态的,也会创建它,但如果InnerClass不是私有的,或者没有InnerClass创建任何实例,则不会创建它.它是某种形式的访问控制?这是如何运作的?