6

当您使用私有内部类编译 Java 类时,由于某种原因,匿名类似乎与它一起自动合成。这个类足以重现它:

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

    private static class InnerClass {}
}

编译时,这会生成预期的SynthesizeAnonymous.classSynthesizeAnonymous$InnerClass.class文件,但它也会生成一个奇怪的文件,该文件对应于已合成SynthesizeAnonymous$1.class的匿名子类。java.lang.Object如果你用 来查看反汇编javap,它的默认构造函数似乎InnerClass获得了这个匿名类型的隐藏参数,并null在调用时传递给它new InnerClass()

为什么要创建这个类?即使InnerClass它不是静态的,它也会被创建,但如果InnerClass它不是私有的或没有创建任何实例,InnerClass则不会创建它。它是某种形式的访问控制吗?这是如何运作的?

4

1 回答 1

5

创建此类是为了为您提供对私有构造函数的访问。

看看这个问题的详细信息。

于 2009-08-12T17:46:32.003 回答