7

是否可以有一个列表并将其用作闭包签名的参数,而不是几个变量?原因是我必须从 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”来处理这样的事情。有什么可以飞的替代品吗?

4

1 回答 1

11

做:

c.call( *args )

工作?不在电脑自动取款机上测试它

于 2012-05-08T21:08:05.520 回答