Можно ли иметь список и использовать его в качестве аргумента для сигнатуры замыкания вместо нескольких переменных? Причина в том, что я должен вызвать замыкание из java-кода, а java-код не будет знать, какие переменные нужны заводному замыканию.
Лучше привести пример.
Скажем, у меня есть «репозиторий замыканий», где каждое замыкание может иметь разные подписи. EG:
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 достаточно «крут», чтобы справиться с чем-то подобным. Любая альтернатива, которая может летать?