Это - то, что я делаю теперь. Существует ли лучший способ получить доступ к суперклассу?
public class SearchWidget {
private void addWishlistButton() {
final SearchWidget thisWidget = this;
button.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
// A better way to access the super class?
// something like "this.super" ...?
workWithWidget(thisWidget);
}
}
}
}
Я программирую с Google Web Toolkit, но я думаю, что это - действительно универсальный вопрос о Java.
Вы можете использовать то, что называется квалифицированным this
.
На любой лексически включающий экземпляр можно сослаться, явно указав ключевое слово
this
.Пусть C будет классом, обозначенным
ClassName
. Пусть n будет целым числом, таким, что C является n -м лексически включающим классом класса, в котором появляется уточненное это выражение. Значение выражения формыClassName.this
является n -м лексически включающим экземпляромthis
(§8.1.3). Тип выражения - C . Это ошибка времени компиляции, если текущий класс не является внутренним классом самого класса C или C .
В этом случае вы можете сделать то, что предлагает Мартин, и использовать:
workWithWidget(SearchWidget.this);
Вы можете написать имя внешнего класса, а затем .this
. Итак:
workWithWidget(SearchWidget.this);
Чтобы получить доступ к super
объекта, который содержит объект анонимного класса из этого объекта, попробуйте, в вашем случае SearchWidget.super
Пример: (см. третий вызов Child.super.print()
)
public class Test1 {
public static void main(String[] args) {
new Child().doOperation();
}
}
class Parent {
protected void print() {
System.out.println("parent");
}
}
class Child extends Parent {
@Override
protected void print() {
super.print();
System.out.println("child");
}
void doOperation() {
new Runnable() {
public void run() {
print(); // prints parent child
Child.this.print(); // prints parent child
Child.super.print(); // prints parent
}
}.run();
}
}