Получите доступ к «этому» из анонимного Java-класса

143

Учитывая следующий код:

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

Я хочу получить доступ Container.select()из select()метода моего анонимного класса . Однако this.select()снова вызовет метод анонимного класса select().

Мое предложение будет:

Введите поле в контейнер, например,

private Container self = this;

Теперь я могу получить доступ Container.select(), позвонив self.select()из анонимного класса.

Это разумный способ? Или есть способы получше?

боб
источник

Ответы:

268
Container.this.select();
Николай Голубев
источник
3
Я не знал, что даже thisключевые слова можно различить так же, как методы и атрибуты. +1
logo_writer
Следует отметить, что здесь вы должны указать именно Containerкласс. Ни один из его предков не будет принят.
Вели
42

Вы можете написать Container.this.select()в отличие от внутреннего класса!

PeterMmm
источник