Получите доступ к «этому» из анонимного 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()в отличие от внутреннего класса!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.