2013-06-20 91 views
2

我一直在嘗試使用嵌套類的各種範圍訣竅,並發現一個特定的情況下我難住。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)之間的範圍鏈接之間的區別。

回答

4

請嘗試以下 -

System.out.println("Inner class: " + Inner.this.className); 
+0

哇,這麼簡單 - 我應該考慮到! –

1

你可以嘗試這樣的

System.out.println("Inner class: " + Inner.this.className);