18

这就是我现在正在做的事情。有没有更好的方法来访问超类?

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 问题。

4

3 回答 3

25

您可以使用所谓的qualified this

JLS 15.8.4。合格的这个

任何词法封闭的实例都可以通过显式限定关键字来引用this

C为 表示的类ClassName。令n是一个整数,使得C是出现限定 this 表达式的类的第n个词法封闭类。形式表达式的值是(§8.1.3)ClassName.this的第n个词法封闭实例。this表达式的类型是C。如果当前类不是C类或C本身的内部类,则这是编译时错误。

在这种情况下,您可以按照 Martijn 的建议进行操作,并使用:

workWithWidget(SearchWidget.this);

参考

相关问题

于 2010-05-18T17:00:08.970 回答
20

您可以编写外部类的名称,然后.this. 所以:

workWithWidget(SearchWidget.this);
于 2010-05-18T15:21:25.733 回答
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();

}
}
于 2010-05-18T15:22:25.697 回答