Доступ до "цього" з анонімного класу 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клас тут. Будь-який з його предків не буде прийнятий.
velis

42

Ви можете написати, Container.this.select()щоб відрізняти від внутрішнього класу!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.