我一直在尝试使用嵌套类的各种范围技巧,并发现了一个我难以理解的特殊情况。
假设你有双重嵌套的本地类:
public class Outer {
private final String className = "outer";
public Outer() {}
public void doThings() {
class Inner {
private final String className = "inner";
public Inner() {}
public void doThings() {
class InnerInner {
private final String className = "inner-inner";
public InnerInner() {}
public void doThings() {
System.out.println("Outer class: "+Outer.this.className);
// How to access the Inner member?
System.out.println("InnerInner class: "+this.className);
}
}
InnerInner ii = new InnerInner();
ii.doThings();
}
}
Inner i = new Inner();
i.doThings();
}
public static void main(String args[]) {
Outer o = new Outer();
o.doThings();
}
}
尽可能接近,类Inner超出了InnerInner类的范围。无论如何,InnerInner可以看到它的内部调用实例吗?当然,使用Outer.Inner.this.className
会失败,因为通过Outer看不到Inner。
顺便说一句,我确实认识到这是一种非常规和不正当的java习惯用语,但我认为这一点非常有趣,特别是要强调原型语言(如javascript)和OO语言(如java)之间的区别链接。
答案 0 :(得分:4)
尝试以下方法 -
System.out.println("Inner class: " + Inner.this.className);
答案 1 :(得分:1)
您可以尝试这样
System.out.println("Inner class: " + Inner.this.className);