当您编译带有私有内部类的 Java 类时,由于某种原因,似乎会自动合成一个匿名类。这个类足以重现它:
public class SynthesizeAnonymous {
public static void method() {
new InnerClass();
}
private static class InnerClass {}
}
编译时,会生成预期的SynthesizeAnonymous.class
and SynthesizeAnonymous$InnerClass.class
文件,但它也会生成一个奇怪的SynthesizeAnonymous$1.class
对应于匿名子类的文件java.lang.Object
那是合成的。如果你看反汇编javap
,它的默认构造函数似乎是InnerClass
获得该匿名类型的隐藏参数,并且null
当new InnerClass()
叫做。
为什么要创建这个类?即使它被创建InnerClass
不是静态的,但如果满足以下条件则不会创建InnerClass
不是私有的或没有实例InnerClass
曾经被创造过。它是某种形式的访问控制吗?这是如何运作的?
创建此类是为了向您提供对私有构造函数的访问。
看一眼这个问题 https://stackoverflow.com/questions/921025/eclipse-warning-about-synthetic-accessor-for-private-static-nested-classes-in-jav了解详情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)