2017-02-19 3 views
1

Ich bin ein langjähriger Java-Benutzer, aber ich spiele zum ersten Mal mit Groovy herum. Ich versuche, try-with-resources mit .withCloseable (Closure) neu zu erstellen.Gibt es einen Weg, den Parameter eines Verschlusses zu werfen?

Dies funktioniert für mich, aber ich bin neugierig, ob es eine Möglichkeit gibt, die zusätzliche Anweisung zu beseitigen, nur um eine Besetzung durchzuführen.

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

Wenn ich versuche, ohne dass explizite Umwandlung ein Verfahren zum MyCloseable aufzurufen, erhalte ich

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

Einfach entfernen? Es sollte nicht notwendig sein –

Antwort

1

notwendig oder nicht, natürlich können Sie den Datentyp eines Verschluss Parameter definieren:

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

druckt

1.0 
2.0 
3.0 

Also in Ihrem Fall wäre es

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

Das hat es geschafft! Closures sind für mich immer noch etwas unheimlich, also habe ich versucht, die Cast-Syntax '(MyCloseable) closeable ->' zu verwenden, anstatt nur den Typ des Parameters zu deklarieren, wie Sie es getan haben! Vielen Dank! –

1

Ich habe bereit, verschiedene Optionen für Sie sein:

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

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

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

Versuchen Sie, die groovier! :)

Verwandte Themen