Groovy -расширение списка в аргументы замыкания

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

6
задан epidemian 8 May 2012 в 23:16
поделиться