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?

Antworten:


268
Container.this.select();

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!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.