2009-07-05 14 views
120

Dado el siguiente código:acceso "este" de Java clase anónima

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. 
     } 
    }; 
    } 
} 

quiero acceder Container.select() de dentro de mi clase anónima select() método. Sin embargo, this.select() volvería a llamar a la clase anónima 'select() método.

Mi sugerencia sería:

introducir un campo en el envase, por ejemplo,

private Container self = this; 

Ahora puedo acceder Container.select() llamando self.select() desde dentro de la clase anónima.

¿Es esta una manera razonable? ¿O hay alguna forma mejor?

Respuesta

236
Container.this.select(); 
+9

Ahora que es algo completamente nuevo para mí. –

+1

No sabía que incluso las palabras clave 'this' podrían diferenciarse tal como lo hacen los métodos y los atributos. +1 –

+0

Debe tenerse en cuenta que debe especificar exactamente la clase 'Container' aquí. Cualquiera de sus antepasados ​​no será aceptado. – velis

39

¡Puede escribir Container.this.select() para distinguirlo de la clase interna!

Cuestiones relacionadas