这就是我现在正在做的事情。有没有更好的方式来访问超类?
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问题。
答案 0 :(得分:21)
您可以使用所谓的合格this
。
任何词汇封闭的实例都可以通过明确限定关键字
this
来引用。让 C 成为
ClassName
表示的类。设 n 是一个整数,使得 C 是 n - 词类封闭的类,其中出现限定的此表达式。ClassName.this
形式的表达式的值是 n - 词汇封闭的this
实例(§8.1.3)。表达式的类型是 C 。如果当前类不是类 C 或 C 本身的内部类,则为编译时错误。
在这种情况下,您可以执行Martijn建议的操作,并使用:
workWithWidget(SearchWidget.this);
答案 1 :(得分:19)
您可以编写外部类的名称,然后.this
。所以:
workWithWidget(SearchWidget.this);
答案 2 :(得分:1)
要从该对象访问包含匿名类对象的对象的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();
}
}