TL; DR: Keine spezielle Syntax, nur eine Funktion
Kotlin hat dafür im Gegensatz zu Java keine spezielle Syntax. Stattdessen wird Try-with-Resources als Standardbibliotheksfunktion angeboten use
.
FileInputStream("filename").use { fis -> //or implicit `it`
//use stream here
}
Die use
Implementierungen
@InlineOnly
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var closed = false
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
throw e
} finally {
if (!closed) {
this?.close()
}
}
}
Diese Funktion ist als generische Erweiterung für alle Closeable?
Typen definiert. Closeable
ist Javas Schnittstelle , die das Testen mit Ressourcen ab Java SE7 ermöglicht .
Die Funktion nimmt eine Funktionsliteral , block
die in einem ausgeführt wird try
. Das gleiche wie mit Try-mit-Ressourcen in Java, der Closeable
wird geschlossen in einemfinally
.
Auch Fehler im Inneren block
führen zu close
Ausführungen, bei denen mögliche Ausnahmen buchstäblich "unterdrückt" werden, indem sie einfach ignoriert werden. Dies unterscheidet sich von Try-with-Resources , da solche Ausnahmen in der Java -Lösung angefordert werden können.
Wie man es benutzt
Die use
Erweiterung ist für jeden Closeable
Typ verfügbar , dh für Streams, Reader usw.
FileInputStream("filename").use {
//use your stream by referring to `it` or explicitly give a name.
}
Der Teil in geschweiften Klammern ist , was wird block
in use
(a Lambda wird hier als Argument übergeben). Nachdem der Block fertig ist, können Sie sicher sein, dass FileInputStream
er geschlossen wurde.