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

发布于 2024-09-01 15:25:14 字数 525 浏览 9 评论 0原文

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

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

This is what I'm doing now. Is there a better way to access the super class?

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);
            }
        }
    }
}

I'm programming with Google Web Toolkit, but I think this is really a generic Java question.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

音栖息无 2024-09-08 15:25:14

您可以使用所谓的限定 this

JLS 15.8.4。合格这个

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

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

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

workWithWidget(SearchWidget.this);

参考文献

相关问题

You can use what is called the qualified this.

JLS 15.8.4. Qualified This

Any lexically enclosing instance can be referred to by explicitly qualifying the keyword this.

Let C be the class denoted by ClassName. Let n be an integer such that C is the n-th lexically enclosing class of the class in which the qualified this expression appears. The value of an expression of the form ClassName.this is the n-th lexically enclosing instance of this (§8.1.3). The type of the expression is C. It is a compile-time error if the current class is not an inner class of class C or C itself.

In this case, you can do what Martijn suggests, and use:

workWithWidget(SearchWidget.this);

References

Related questions

作业与我同在 2024-09-08 15:25:14

可以先写外部类的名字,然后写.this。所以:

workWithWidget(SearchWidget.this);

You can write the name of the outer class and then .this. So:

workWithWidget(SearchWidget.this);
瘫痪情歌 2024-09-08 15:25:14

要访问包含该对象中匿名类的对象的对象的 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();

}
}

To access super of the object that contains an object of an anonymous class from that object, try, in your case SearchWidget.super


Example:(see the third call 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();

}
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文