gpt4 book ai didi

java - 私有(private)内部类合成了意外的匿名类

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:41 26 4
gpt4 key购买 nike

当您编译带有私有(private)​​内部类的 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 不是私有(private)的或者 InnerClass 的实例永远不会创建,它就不会被创建创建。它是某种形式的访问控制吗?它是如何工作的?

最佳答案

创建此类是为了让您能够访问私有(private)构造函数。

看看this question了解详情。

关于java - 私有(private)内部类合成了意外的匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com