2017-10-19 149 views
-1

我的主類有2個內部類,其中1個是線程,我不知道我的內部類2如何訪問(或如何知道var1是true或false)值內部類1,這是我的例子,謝謝!Java內部類訪問變量在另一個內部類

public class InnerClass { 
    public class InnerClass1 implements NativeKeyListener { 
     public boolean var1; 
    } 

    public class InnerClass2 implements Runnable{ 

     @Override 
     public void run() { 
      while (true) { 
       var1... 
      } 
     } 

    } 
} 
+3

您需要InnerClass1'的'一個實例。 – shmosel

+0

無論如何可以做到這一點! –

+0

對不起,再來? – shmosel

回答

0

,除非你已經實例化對象,你不能訪問非靜態變量/方法/內部類(即created an instance of the object)。您需要一個InnerClass1對象,然後才能存儲或獲取任何內容。在您執行類似InnerClass1 foo = new InnerClass1()之前,任何地方都不會有var1

無論如何,我認爲你在濫用內部類。我建議如果你還沒有通過Java Tutorials Trail來了解類,字段和實例如何在Java中工作的基本概念。

0

您可以通過由innerclass1實現的接口或類來完成。試試這個:

public interface NativeKeyListener { 
boolean a(); 
} 

public class InnerClass { 

static NativeKeyListener m() { 
    class InnerClass1 implements NativeKeyListener { 
     public boolean var1; 

     public boolean a() { 
      return var1; 
     } 
    } 
    return new InnerClass1(); 
} 

public class InnerClass2 implements Runnable { 

    public void run() { 
     NativeKeyListener i = InnerClass.m(); 
     i.a(); 
    } 

} 

}

+0

如果您不想在接口NativeKeyListener上添加'a()'方法,那麼使用'a()'方法創建一個新的'interface'並在InnerClass1上實現它。在這種情況下'NativeKeyListener i = InnerClass.m();'將成爲'NewInterface i = InnerClass.m();' –