Groovy 有没有一种方法可以强制转换闭包的参数?

Groovy 有没有一种方法可以强制转换闭包的参数?,groovy,closures,Groovy,Closures,我是java的长期用户,但是我第一次使用groovy。我正在尝试使用.withCloseable(Closure)重新创建try with resources 这对我来说很有效,但是,我很好奇是否有办法消除额外的语句来执行强制转换 new MyCloseable().withCloseable { closeable -> def myCloseable = (MyCloseable) closeable; ... } 如果我尝试在没有显式强制转换的情况下调用MyClos

我是java的长期用户,但是我第一次使用groovy。我正在尝试使用.withCloseable(Closure)重新创建try with resources

这对我来说很有效,但是,我很好奇是否有办法消除额外的语句来执行强制转换

new MyCloseable().withCloseable { closeable ->
    def myCloseable = (MyCloseable) closeable;
    ...
}
如果我尝试在没有显式强制转换的情况下调用MyCloseable的方法,那么

No such property: MyCloseable for class: com.test.MyTest
groovy.lang.MissingPropertyException: No such property: MyCloseable for class: com.test.MyTest

不管是否必要,您当然可以定义闭包参数的数据类型:

def list = [1, 2, 3]
list.each { float i ->
    println i
}
印刷品

1.0
2.0
3.0
所以在你的情况下是这样的

new MyCloseable().withCloseable { MyCloseable closeable ->
    ...
}

我为您准备了几个选项:

new MyCloseable().withCloseable { closeable ->
    MyCloseable myCloseable = closeable
    ...
}

new MyCloseable().withCloseable { MyCloseable closeable ->
    def myCloseable = closeable
    ...
}

new MyCloseable().withCloseable { closeable ->
    def myCloseable = closeable as MyCloseable
    ...
}

试试groovier!:)

把它拿走?不必了,这就成功了!闭包对我来说还是有点怪,所以我尝试使用cast语法
(MyCloseable)closeable->
,而不是像您那样声明参数的类型!谢谢