Kotlin die use
Funktion für Closeable
Objekte liefert, aber es scheint sie vergessen AutoCloseable
zu berücksichtigen (z DB Prepared Statements) für den Try-with-Ressourcen voll Java-Äquivalent.Meine eigene Lösung für Kotlin des Try-with-Ressourcen Abwesenheit
Ich habe die nächste "home-made" Lösung implementiert:
inline fun <T:AutoCloseable,R> trywr(closeable: T, block: (T) -> R): R {
try {
return block(closeable);
} finally {
closeable.close()
}
}
Dann können Sie es das nächste Art und Weise verwenden:
fun countEvents(sc: EventSearchCriteria?): Long {
return trywr(connection.prepareStatement("SELECT COUNT(*) FROM event")) {
var rs = it.executeQuery()
rs.next()
rs.getLong(1)
}
}
ich Kotlin bin neu, und ich möchte zu wissen, ob ich etwas wichtiges in meiner eigenen Lösung vermisse, das mir Probleme/Leckagen in einer Produktionsumgebung geben könnte.
der Grund, warum sie nicht unterstützen 'AutoClosable' out-of-the-Box ist, dass sie immer noch Java8 Unterstützung zu implementieren sowie JDK8 Klassen – voddan
Sie könnten immer unterstützen kopieren Sie die Quelle für 'use' und Änderung' Closeable' zu 'AutoCloseable' (siehe [ReadWrite.kt: 145-177] (https://github.com/JetBrains/kotlin/blob/8549ec7645ff6db4d5fede2c43034be66683561a/libraries/stdlib/src/ Kotlin/io/ReadWrite.kt # L145-L177). – mfulton26
Betrachten Java 8 für das Muster. Sie können es hier finden http://stackoverflow.com/a/43269795/2463695 –