考虑以下类别:
public class A {
public int a;
public class B {
public int b;
public void foo() {
System.out.println(A.this.a);
System.out.println(this.b);
}
}
}
在 foo
,我访问外部 A
内部示例 B
使用语法 A.this
. 这很好,因为我正在尝试访问的外部示例 A
从中的“当前对象” B
. 但是,如果我想访问外部 A
类型的变量中的对象 B
?
public class A {
public int a;
public class B {
public int b;
public void foo(B other) {
System.out.println(other.A.this.a); // <-- This is (obviously) wrong. What SHOULD I do here?
System.out.println(other.b);
}
}
}
从“内部”示例访问“外部”示例的正确语法是什么 other
在 foo
?
我知道我可以访问外部变量 a
简单使用 other.a
. 请原谅这个做作的例子!我只是想不出更好的方法来问你如何到达 other.A.this
.
2条答案
按热度按时间pkwftd7m1#
据我从java语言规范中所知,java没有为这种访问提供语法。您可以通过提供自己的访问器方法来解决此问题:
uqdfh47h2#
好吧,您不能直接这样做,因为java语言中没有定义这种方法。但是,您可以使用一些反射hack来获取该字段的值。
基本上,内部类在名为
this$0
. 你可以在这篇文章中找到更多的细节。现在,使用反射,可以访问该字段,并获取该字段的任何属性的值:
这将打印
1, 1
.但正如我所说,这只是一个黑客。您不会希望在实际应用程序中编写这样的代码。相反,你应该按照@dashblinkenlight的答案中描述的更干净的方式去做。