Javaで書かれたクラス関数へのコールバックを、匿名抽象クラスインスタンスを使用してではなく、groovyクラスから提供しようとしています。以下のコードは私の問題を示しています。GroovyからJava関数呼び出しへのコールバックを提供
//Java Code
abstract class CallBackWrapper
{
int someAttr, someOtherAttr;
public abstract void execute();
public int getAttr()
{
return someAttr;
}
}
class Delegator
{
public void callExecute(CallBackWrapper w)
{
w.execute();
}
}
//Groovy Code
class GroovyClass
{
private void foo()
{
//Doesn't work
Delegator d = new Delegator();
d.callExecute(new CallBackWrapper() {
public void execute() {
System.out.println("Hello World");
}
});
//Also doesn't work
Delegator d = new Delegator();
d.callExecute([execute:{println "HELLO from Groovy"}] as CallBackWrapper)
}
}
私はそれが動作するようになってになった最も近いGroovyのクラスの中にそれを宣言するinterface
とにCallBackWrapper
を変更することです。しかし、私は抽象クラスが必要です。私の質問は、どのようにJavaクラスが理解できるように "Groovy Land"からこのコールバック動作を実装できますか?現時点では、Groovyランタイムエラーが発生し、問題の本質を説明するのにはあまり役に立ちません。
'' d.callExecute {println "HELLO from Groovy"}がCallBackWrapperとして機能します。私はそれを試していないので、今のところそれはコメントです:)。また、それが動作しない場合、エラーは何ですか? – JBaruch
はい、取得している例外を提供してください。 – cjstehno