2017-10-19 4 views
-1

Ma classe principale a 2 classe interne, 1 d'entre eux est le fil, je ne sais pas comment mon interne classe 2 peut accéder (Ou comment savoir var1 est vrai ou faux) valeur de classe interne 1, ceci est mon exemple, merci!Java classe interne variable d'accès dans une autre classe interne

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

    public class InnerClass2 implements Runnable{ 

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

    } 
} 
+3

Vous auriez besoin d'une instance de 'InnerClass1'. – shmosel

+0

De toute façon peut le faire! –

+0

Je suis désolé, reviens? – shmosel

Répondre

0

Vous ne pouvez pas accéder à des variables non statiques/méthodes/classes internes, sauf si vous avez instancié l'objet (à savoir created an instance of the object). Vous avez besoin d'un objet InnerClass1 avant de pouvoir stocker ou obtenir quelque chose. Jusqu'à ce que vous faites quelque chose comme InnerClass1 foo = new InnerClass1(), il n'y a aucun var1 n'importe où.

De toute façon, je pense que vous utilisez abusivement les classes internes. Je suggérerais si vous n'avez pas déjà parcouru le Java Tutorials Trail pour avoir une idée de base sur la façon dont les classes, les champs et l'instanciation fonctionnent en Java.

0

Vous pouvez le faire par une interface ou une classe implémentée par innerclass1. Essayez ceci:

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

si vous ne voulez pas ajouter la méthode 'a()' sur l'interface 'NativeKeyListener' alors créez une nouvelle' interface' avec la méthode def comme 'a()' et appliquez-la sur 'InnerClass1'. Dans ce cas 'NativeKeyListener i = InnerClass.m();' deviendra 'NewInterface i = InnerClass.m();' –