2017-02-19 81 views
1

我是一个很长时间的java用户,但我第一次玩groovy。我试图通过使用.withCloseable(Closure)重新创建试用资源。有没有一种方法可以投射闭包的参数?

这适用于我,但是,我很好奇,如果有一种方法可以消除额外的陈述来执行演员。

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 
+0

只需删除它?它不应该是必要的 –

回答

1

必要或没有,当然你可以定义一个封闭参数的数据类型:

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

打印

1.0 
2.0 
3.0 

所以你的情况这将是

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

这样做了!关闭对我来说有点时髦感,所以我试图用'(MyCloseable)close - >'来代替刚才声明的参数类型!谢谢! –

1

我已经准备了几种方法供您选择:

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

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

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

尝试更巧妙的! :)

相关问题