在Java中访问内部类的包含类

时间:2010-05-18 15:19:16

标签: java this program-flow

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

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

3 个答案:

答案 0 :(得分:21)

您可以使用所谓的合格this

JLS 15.8.4. Qualified 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();

}
}