Ada*_*deg 12 groovy closures static-typing groovy++
我想更清楚地了解关于他们的论证类型的闭包.所以我会写类似的东西
List<Y> myCollect(List<X> list, Closure<X,Y> clos) { ... }
Run Code Online (Sandbox Code Playgroud)
我知道Groovy不会使用该类型信息,但Groovy ++可能会在编译时使用它.这可以实现(除了将其纳入评论)?
更新:标题可能听起来有误导性,但我认为上面的例子会让它更清晰.我有兴趣指定一个闭包的类型,它是某个函数的参数.假设,我想重新启动内置功能collect.所以我对写作感兴趣myCollect,而不是写作clos.我想要实现的是获取编译时错误
myCollect(['a', 'ab'], { it / 2 }) // compile error
myCollect(['a', 'ab'], { it.size() }) // OK
Run Code Online (Sandbox Code Playgroud)
您可以定义闭包的参数类型,但上面显示的语法不正确.这是一个没有参数类型的闭包:
def concatenate = {arg1, arg2 ->
return arg1 + arg2
}
Run Code Online (Sandbox Code Playgroud)
这是与参数类型相同的闭包
def concatenate = {String arg1, String arg2 ->
return arg1 + arg2
}
Run Code Online (Sandbox Code Playgroud)
我知道Groovy不会使用该类型信息,但Groovy ++可能会在编译时使用它.
Groovy确实进行了一些编译时类型检查,但没有Groovy ++(或Java)那么多.即使在编译时未使用类型信息,它也会在运行时进行检查,并且作为一种文档形式也很有价值.