gpt4 book ai didi

java - 外部类如何访问内部类的私有(private)属性?

转载 作者:行者123 更新时间:2023-11-29 03:19:52 25 4
gpt4 key购买 nike

我读过这个关于静态内部类的概念:ViewHolder 声明为 ListView 适配器内部的内部类,以提高 getView() 的性能。

考虑下面的类

public class OuterClass{

public class InnerClass{
private int privateProperty= -2;
}

public static void main(String[] args) {
OuterClass oc = new OuterClass();
InnerClass ic = oc.new InnerClass();
ic.privateProperty = -98;
}
}

如果内部类包含私有(private)属性,并且内部类的对象是在外部类的方法中创建的,那么内部类的私有(private)属性可以直接使用访问。 “点”运算符。

我在某处读到,内部类的私有(private)属性是使用外部类的合成 setter getter 方法访问的

我想澄清一下我的概念。

最佳答案

编译器生成方法来访问内部类的私有(private)成员。如果您编译您的示例代码并检查字节码,您会发现它好像是这样写的:

public class OuterClass{

public class InnerClass{
private int privateProperty= -2;
static int access$002(InnerClass obj, int value) {
obj.privateProperty = value;
return value;
}
}

public static void main(String[] args) {
OuterClass oc = new OuterClass();
InnerClass ic = oc.new InnerClass();
InnerClass.access$002(ic, -98);
}
}

这条线的转换

ic.privateProperty = -98;

进入方法调用:

InnerClass.access$002(ic, -98);

连同静态方法 InnerClass.access$002 的创建由编译器完成。静态方法(由我的编译器命名为 access$002)是您已阅读的“合成 setter 方法”的一个示例。因此,这两个类的字节码没有违反 Java 的访问规则。

关于java - 外部类如何访问内部类的私有(private)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24311942/

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