加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy – 将列表扩展为闭包参数

发布时间:2020-12-14 16:30:34 所属栏目:大数据 来源:网络整理
导读:是否有可能有一个列表并将其用作闭包签名的参数,而不是几个变量?原因是我必须从 java代码调用一个闭包,而 java代码不知道groovy闭包需要什么变量. 用一个例子可以更好地服务. 假设我有一个’闭包存储库’,每个闭包可能有不同的签名.例如: closures = [ clo
是否有可能有一个列表并将其用作闭包签名的参数,而不是几个变量?原因是我必须从 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",5,"Hello more");

请参见上面未编译的行.我觉得groovy是’groovy’足以处理这样的事情.任何可能会飞的替代品?

解决方法

请问:

c.call( *args )

工作?不是在计算机上测试它

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读