我一直在嘗試使用嵌套類的各種範圍訣竅,並發現一個特定的情況下我難住。Java:嵌套方法本地內部類和可訪問性
假設你有雙重嵌套局部類像這樣:
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();
}
}
儘可能靠近我可以告訴大家,內部類是出了InnerInner類的範圍。無論如何,InnerInner可以看到它的內部調用實例嗎?當然,使用Outer.Inner.this.className
會失敗,因爲內部通過Outer不可見。另一方面,我確實意識到這是一個非常規且不恰當的java成語,但我認爲這很有趣,特別是突出了原型語言(如JavaScript)和OO語言(如Java)之間的範圍鏈接之間的區別。
哇,這麼簡單 - 我應該考慮到! –