2017-02-19 78 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 
    ... 
} 

嘗試更巧妙的! :)

相關問題