TL; DR: Pas de syntaxe spéciale, juste une fonction
Kotlin, contrairement à Java, n'a pas de syntaxe spéciale pour cela. Au lieu de cela, try-with-resources est proposé comme fonction de bibliothèque standard use
.
FileInputStream("filename").use { fis -> //or implicit `it`
//use stream here
}
Les use
implémentations
@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()
}
}
}
Cette fonction est définie comme une extension générique sur tous les Closeable?
types. Closeable
est l' interface de Java qui permet d' essayer avec des ressources à partir de Java SE7 .
La fonction prend une fonction littérale block
qui est exécutée dans un fichier try
. Comme avec try-with-resources en Java, le Closeable
se ferme dans unfinally
.
Les échecs qui se produisent à l'intérieur block
mènent également à des close
exécutions, où les exceptions possibles sont littéralement "supprimées" en les ignorant simplement. Ceci est différent de try-with-resources , car de telles exceptions peuvent être demandées dans la solution Java .
Comment l'utiliser
L' use
extension est disponible sur n'importe quel Closeable
type, c'est-à-dire les flux, les lecteurs, etc.
FileInputStream("filename").use {
//use your stream by referring to `it` or explicitly give a name.
}
La partie entre accolades est ce qui devient block
in use
(un lambda est passé comme argument ici). Une fois le blocage terminé, vous pouvez être sûr qu'il FileInputStream
a été fermé.