リストを作成して、代わりに複数の変数であるクロージャ署名の引数として使用することは可能ですか?その理由は、Javaコードからクロージャを呼び出さなければならず、JavaコードはGroovyクロージャに必要な変数を認識しないためです。
これは、例を使用した方が適切です。
「クロージャーリポジトリ」があり、クロージャーごとに異なる署名があるとします。例えば:
closures = [
closureA: { int a, String b ->
a.times {
System.err.println(b);
}
},
closureB: { int a, int b, String c ->
(a+b).times {
System.err.println(c);
}
}
]
次に、これらのクロージャを呼び出すためにJavaコードに公開しているメソッドがあります。
def tryClosureExpansion(String whichClosure, Object ... args) {
def c = closures[whichClosure]
c.call(args) // DOESNT COMPILE !
}
そして、Javaの場合、このメソッドを次のように呼び出します。
// these calls will happen from Java, not from Groovy
tryClosureExpansion("closureA", 1, "Hello");
tryClosureExpansion("closureB", 1, 5, "Hello more");
コンパイルされない行については、上記を参照してください。groovyはこのようなものを処理するのに十分な「groovy」のように感じます。飛ぶかもしれない代替案はありますか?