2017-10-19 19 views
-1

メインクラスは2つの内部クラスを持ち、そのうちの1つはスレッドです。内部クラス2がどのようにアクセスできるか(var1が真または偽であるかどうかを知る方法)内部クラス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

:これを試してみてください。 – shmosel

+0

とにかくできます! –

+0

すみません、もう一度やりますか? – shmosel

答えて

0

オブジェクトをインスタンス化していない限り、あなたは非静的変数/メソッド/インナークラスにアクセスすることはできません(すなわちcreated an instance of the object)。何かを保存または取得するには、InnerClass1オブジェクトが必要です。 InnerClass1 foo = new InnerClass1()のような操作を行うまで、var1はどこにもありません。

とにかく、私はあなたが内部のクラスを悪用していると思います。 Java Tutorials Trailを参照していない場合は、クラス、フィールド、およびインスタンス化がJavaでどのように機能するかについての基本的な考えを得ることをお勧めします。

0

これは、innerclass1によって実装されているインターフェイスまたはクラスによって実行できます。あなたが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

メソッド 'a()'をインタフェース 'NativeKeyListener'に追加したくない場合は、' a() 'のようなメソッドdefを持つ新しい' interface'を作成し、 'InnerClass1'に実装してください。その場合、 'NativeKeyListener i = InnerClass.m();'は 'NewInterface i = InnerClass.m();'になります。 –

関連する問題