2008-09-11 3 views
181

Nel seguente frammento di codice:parola chiave per la classe esterna da una classe interna anonima

public class a { 
    public void otherMethod(){} 
    public void doStuff(String str, InnerClass b){} 
    public void method(a){ 
     doStuff("asd", 
      new InnerClass(){ 
       public void innerMethod(){ 
        otherMethod(); 
       } 
      } 
     ); 
    } 
} 

C'è una parola chiave per fare riferimento alla classe esterna dalla classe interna? Fondamentalmente quello che voglio fare è outer.otherMethod(), o qualcosa del genere, ma non riesco a trovare nulla.

risposta

298

In generale si utilizza OuterClassName.this per fare riferimento all'istanza di inclusione della classe esterna.

Nel tuo esempio, che sarebbe a.this.otherMethod()

+0

si può dire perché 'a.otherMethod()' non funzionerà? –

+2

@ T.Todua 'OuterClassName.otherMethod()' farebbe riferimento a un metodo statico, quindi è necessario 'OuterClassName.this' per ottenere l'istanza della classe esterna. –

+0

Can OuterClassName.questo è nullo all'interno di una classe interna, in alcuni casi? –

40
OuterClassName.this.outerClassMethod();