Greifen Sie über die anonyme Java-Klasse auf "this" zu

143

Gegeben den folgenden Code:

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

Ich möchte über Container.select()die select()Methode meiner anonymen Klasse zugreifen . Allerdings this.select()würde wieder die anonyme Klasse nennt select()Methode.

Mein Vorschlag wäre:

Führen Sie ein Feld in Container ein, z

private Container self = this;

Jetzt kann ich zugreifen, Container.select()indem ich self.select()aus der anonymen Klasse heraus anrufe.

Ist das ein vernünftiger Weg? Oder gibt es bessere Möglichkeiten?

Bob
quelle

Antworten:

268
Container.this.select();
Mykola Golubyev
quelle
3
Ich wusste nicht einmal, dass thisSchlüsselwörter genau wie Methoden und Attribute unterschieden werden können. +1
logo_writer
Es ist zu beachten, dass Sie hier die genaue ContainerKlasse angeben müssen . Jeder seiner Vorfahren wird nicht akzeptiert.
Velis
42

Sie können schreiben, Container.this.select()um sich von der inneren Klasse zu unterscheiden!

PeterMmm
quelle