2009-07-05 4 views
120

Dato il seguente codice:Access "questo" da Java classe anonima

public interface Selectable { 
    public void select(); 
} 

public class Container implements Selectable { 
    public void select() { 
    ... 
    } 
    public void createAnonymousClass() { 
    Selectable s = new Selectable() { 
     public void select() { 
     //see comment below. 
     } 
    }; 
    } 
} 

voglio accedere Container.select() da dentro il mio classe anonima select() metodo. Tuttavia, this.select() chiamerebbe nuovamente il metodo della classe anonima "select()".

Il mio suggerimento sarebbe:

Introdurre un campo nel contenitore, per esempio

private Container self = this; 

Ora posso accedere Container.select() chiamando self.select() dall'interno della classe anonima.

È un modo ragionevole? O ci sono modi migliori?

risposta

236
Container.this.select(); 
+9

Ora è qualcosa di completamente nuovo per me. –

+1

Non sapevo nemmeno che "questo" parole chiave potessero essere differenziati proprio come possono fare i metodi e gli attributi. +1 –

+0

Va notato che devi specificare esattamente la classe 'Container' qui. Nessuno dei suoi antenati non sarà accettato. – velis

39

È possibile scrivere Container.this.select() in distinto dalla classe interna!