I'd like to be more explicit about my closures regarding their argument types. So I would write something like
List<Y> myCollect(List<X> list, Closure<X,Y> clos) { ... }
I know that Groovy won't use that type information, but Groovy++ may use it at compile time. Can this be be achieved (other than putting it into a comment)?
UPDATE:
The title may sound misleading, but I thought the above example would make it clearer. I'm interested in specifying types of a closure which is the argument of some function. Suppose, I want to redefince the built-in collect
. So I'm interested in writing myCollect
, not in writing clos
. What I want to achieve is get compile time errors
myCollect(['a', 'ab'], { it / 2 }) // compile error
myCollect(['a', 'ab'], { it.size() }) // OK
Closure<X,Y>
to accept a singleX
as input and returnsY
. So it can be applied to the items ofList<X>
. I updated the return type of the function. – Crosley