在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
来引用任何词汇封闭实例。设C是
ClassName
表示的类。 设n是一个整数,使得C是出现限定该表达式的类的第n个词汇封闭类。ClassName.this
forms的表达式的值是第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(); } }