Dostęp do „tego” z anonimowej klasy Java

143

Biorąc pod uwagę następujący kod:

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

Chcę uzyskać dostęp Container.select()z select()metody mojej klasy anonimowej . Jednak this.select()ponownie wywołałby select()metodę klasy anonimowej .

Moja sugestia byłaby taka:

Wprowadź pole do kontenera, np

private Container self = this;

Teraz mogę uzyskać dostęp Container.select(), dzwoniąc self.select()z klasy anonimowej.

Czy to rozsądny sposób? Czy są jakieś lepsze sposoby?

Pion
źródło

Odpowiedzi:

268
Container.this.select();
Mykoła Golubyev
źródło
3
Nie wiedziałem, thisże można rozróżniać nawet słowa kluczowe, tak jak metody i atrybuty. +1
logo_writer
Należy zauważyć, że musisz tutaj określić dokładnie Containerklasę. Żaden z jej przodków nie zostanie przyjęty.
velis,
42

Możesz pisać, Container.this.select()aby odróżnić się od klasy wewnętrznej!

Peter Mmm
źródło