0

Apache Wicket (6.15.0) と Groovy (2.2.2 または 2.3.1) で簡単なことを書こうとしています。そして、内部クラスに問題があります。

class CreatePaymentPanel extends Panel { 
  public CreatePaymentPanel(String id) {
    super(id)
    add(new PaymentSelectFragment('currentPanel').setOutputMarkupId(true))
}

public class PaymentSelectFragment extends Fragment {
        public PaymentSelectFragment(String id) {
            super(id, 'selectFragment', CreatePaymentPanel.this) // problem here
            add(new AjaxLink('cardButton') {
                @Override
                void onClick(AjaxRequestTarget target) {
                    ... CreatePaymentPanel.this // not accessible here 
                }
            })
            add(new AjaxLink('terminalButton') {
                @Override
                void onClick(AjaxRequestTarget target) {
                    ... CreatePaymentPanel.this // not accessible here 
                }
            });
        }
        } // end of PaymentSelectFragment class
} // end of CreatePaymentPanel class

Groovy は、CreatePaymentPanel クラスで "this" プロパティを見つけようとします。これを回避するにはどうすればよいですか? これは有効な Java コードですが、グルーヴィーではありません。

ただし、Test.groovy:

class Test {

    static void main(String[] args) {
        def a = new A()
    }

    static class A {
        A() {
            def c = new C()
        }

        public void sayA() { println 'saying A' }

        class B {
            public B(A instance) {
                A.this.sayA()
                instance.sayA()
            }
        }
        /**
         * The problem occurs here
         */
        class C extends B {
            public C() {
                super(A.this) // groovy tries to find property "this" in A class
                sayA()
            }
        }
    }
}

上記のコードは機能しません。Wicket の場合と同様に、同じエラーが発生します。

そしてTestJava.java、同じで動作しています:

public class TestJava {

    public static void main(String[] args) {
        A a = new A();
    }

    static class A {
        A() {
            C c = new C();
        }

        public void sayA() {
            System.out.println("saying A");
        }

        class B {
            public B(A instance) {
                instance.sayA();
            }
        }

        /**
         * This works fine
         */
        class C extends B {
            public C() {
                super(A.this);
                sayA();
            }
        }
    }
}

私は何が欠けていますか?

4

1 に答える 1

0

そこにアクセスできるインスタンスがないため、CreatePaymentPanel.this内部を参照することはできません。許可された場合、それがどのように評価されると予想しますか?PaymentSelectFragmentCreatePamentPanel

于 2014-05-20T11:26:35.693 に答える