2017-02-19 4 views
1

Я долгое время java-пользователь, однако я впервые играю с groovy. Я пытаюсь воссоздать try-with-resources с помощью .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

Это сделало! Закрытие для меня еще немного фанки, поэтому я пытался использовать синтаксис cast (MyCloseable) closeable -> 'вместо того, чтобы просто объявлять тип параметра, как вы это делали! Благодаря! –

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 
    ... 
} 

Попробуйте groovier! :)

Смежные вопросы