![](/img/trans.png)
[英]How can one get reference to the outer class from inner class not using outer class name?
[英]How can I get the outer class's reference if the anonymous Inner Class has two outer class?
public class OuterClass {
public class InnerClass{
void test(){
};
}
}
class Client{
public void x(){}
public void lucian() {
OuterClass.InnerClass innerClass = new OuterClass().new InnerClass(){
void test() {
Client.this.x();
x();
******** // how can I get the reference of the OuterClass at here? ********
}
};
innerClass.test();
}
}
我知道编译器将为带有两个参数的匿名内部类生成一个构造函数,一个是客户端的引用,另一个是外部类,但是如何使用 Client.this 在方法 test() 中获取外部类的引用,就像客户端的引用一样? 不是客户。这个!! 但是外部类在客户端中的引用。
你不能。 无论如何,不是疯狂的反射恶作剧。 所以,只要写出来:
public void lucian() {
OuterClass oc = new OuterClass();
OuterClass.InnerClass ic = oc.new InnerClass() {
void test() {
Client.this.x();
x();
oc.x();
}
};
ic.test();
}
注意:非静态内部类很奇怪,很少正确。 初学者 Java 程序员永远不要使用它们; 高级 Java 编码人员应该认真思考。 在任何情况下,内部类的默认选择应该始终是它们是静态的。
您可以保存对 OuterClass 对象的引用(到目前为止您是匿名创建的):
class Client{
private OuterClass outerClass;
public OuterClass getOuterClass() {
return outerClass;
}
public void setOuterClass(OuterClass outerClass) {
this.outerClass = outerClass;
}
public void x(){
System.out.println("===");
}
public void lucian() {
OuterClass outerClass = new OuterClass();
setOuterClass(outerClass);
OuterClass.InnerClass innerClass = outerClass.new InnerClass(){
void test() {
Client1.this.x();
x();
System.out.println(getOuterClass());
}
};
innerClass.test();
}
public static void main(String[] args) {
Client client = new Client();
client.lucian();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.