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