2009-07-05 3 views
120

Учитывая следующий код:доступа «это» из Java анонимного класса

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() внутри анонимного класса.

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

ответ

236
Container.this.select(); 
+9

Теперь это нечто совершенно новое для меня. –

+1

Я не знал, что даже эти ключевые слова могут быть дифференцированы так же, как методы и атрибуты. +1 –

+0

Следует отметить, что здесь необходимо указать класс 'Container'. Любой из его предков не будет принят. – velis

39

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

 Смежные вопросы

  • Нет связанных вопросов^_^