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?

Odpowiedzi:


268
Container.this.select();

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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.