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

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

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

您可以使用所谓的限定条件。

JLS 15.8.4。 合格的

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

CClassName表示的类。 设n是一个整数,使得C是出现限定该表达式的类的第n个词汇封闭类。 ClassName.thisforms的表达式的值是第n个词汇封闭的实例(第8.1.3节)。 表达式的类型是C. 如果当前类不是C类或C本身的内部类,则是编译时错误。

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

 workWithWidget(SearchWidget.this); 

参考

  • JLS 15.8.4。 合格的
  • JLS 8.1.3内部类和封闭实例

相关问题

  • 从内部类访问外部类:为什么这样做?

你可以写出外部类的名称然后.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(); } }