18

これが私が今していることです。スーパークラスにアクセスするより良い方法はありますか?

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 の質問だと思います。

4

3 に答える 3

25

修飾された と呼ばれるものを使用できますthis

JLS 15.8.4。これを修飾しました

字句的に囲んでいるインスタンスは、キーワードを明示的に修飾することで参照できますthis

で表されるクラスをCClassNameとする。Cが修飾された this 式が現れるクラスのn番目の字句的に囲んでいるクラスであるような整数をnとする。形式の式の値は、(§8.1.3)のn番目の字句的に囲んでいるインスタンスです。式の型はCです。現在のクラスがクラスCまたはC自体の内部クラスでない場合、コンパイル時エラーになります。ClassName.thisthis

この場合、Martijn が提案することを実行して、以下を使用できます。

workWithWidget(SearchWidget.this);

参考文献

関連する質問

于 2010-05-18T17:00:08.970 に答える
20

外側のクラスの名前を書いてから.this. そう:

workWithWidget(SearchWidget.this);
于 2010-05-18T15:21:25.733 に答える
1

superそのオブジェクトから匿名クラスのオブジェクトを含むオブジェクトに アクセスするには、あなたの場合、試してくださいSearchWidget.super


例:(3 番目の呼び出しを参照 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();

}
}
于 2010-05-18T15:22:25.697 に答える