Come si ottiene un riferimento alla classe che lo racchiude da una classe interna anonima in Java?[duplicare]
Domanda
Questa domanda ha già una risposta qui:
Attualmente sto creando un riferimento esplicito a questo nella classe esterna in modo da avere un nome a cui fare riferimento nella classe interna anonima.Esiste un modo migliore per farlo?
Soluzione
L'ho appena trovato di recente.Utilizzo OuterClassName.this
.
class Outer {
void foo() {
new Thread() {
public void run() {
Outer.this.bar();
}
}.start();
}
void bar() {
System.out.println("BAR!");
}
}
Aggiornato Se vuoi solo l'oggetto stesso (invece di invocare membri), allora Outer.this
è la strada da percorrere.
Altri suggerimenti
Utilizzo EnclosingClass.this
Puoi comunque utilizzare Outer.class per ottenere la classe dell'oggetto della classe esterna (che restituirà lo stesso oggetto Class di Outer.this.getClass() ma è più efficiente)
Se desideri accedere ai dati statici nella classe che li racchiude, puoi utilizzare Outer.name dove name è il campo o il metodo statico.