Accedi a "questo" dalla classe anonima Java


143

Dato il seguente codice:

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()dal select()metodo della mia classe anonima . Tuttavia, this.select()chiamerebbe nuovamente il select()metodo della classe anonima .

Il mio suggerimento sarebbe:

Introdurre un campo nel contenitore, ad es

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?

Risposte:


268
Container.this.select();

3
Non sapevo che anche le thisparole chiave potessero essere differenziate proprio come i metodi e gli attributi. +1
logo_writer il

Va notato che è necessario specificare la Containerclasse esattamente qui. Nessuno dei suoi antenati non sarà accettato.
Velis,

42

Puoi scrivere Container.this.select()per distinguerti dalla classe interiore!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.