Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing the containing class of an inner class in 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.

like image 928
gerdemb Avatar asked May 18 '10 15:05

gerdemb


2 Answers

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

  • JLS 15.8.4. Qualified This
  • JLS 8.1.3 Inner Classes and Enclosing Instances

Related questions

  • Access outer class from inner class: Why is it done this way?
like image 127
polygenelubricants Avatar answered Sep 28 '22 09:09

polygenelubricants


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

workWithWidget(SearchWidget.this);
like image 28
Martijn Courteaux Avatar answered Sep 28 '22 10:09

Martijn Courteaux