TL; DR: nessuna sintassi speciale, solo una funzione
Kotlin, al contrario di Java, non ha una sintassi speciale per questo. Invece, prova con le risorse , è offerto come funzione di libreria standard use
.
FileInputStream("filename").use { fis -> //or implicit `it`
//use stream here
}
Le use
implementazioni
@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()
}
}
}
Questa funzione è definita come un'estensione generica su tutti i Closeable?
tipi. Closeable
è l' interfaccia di Java che consente di provare con risorse a partire da Java SE7 .
La funzione assume una funzione letterale block
che viene eseguita in a try
. Come con try-with-resources in Java, Closeable
viene chiuso in a finally
.
Anche i fallimenti che si verificano all'interno block
portano a close
esecuzioni, dove eventuali eccezioni vengono letteralmente "soppresse" semplicemente ignorandole. Ciò è diverso dal tentativo con risorse , poiché tali eccezioni possono essere richieste nella soluzione Java .
Come usarlo
L' use
estensione è disponibile su qualsiasi Closeable
tipo, ad esempio stream, lettori e così via.
FileInputStream("filename").use {
//use your stream by referring to `it` or explicitly give a name.
}
La parte tra parentesi graffe è ciò che diventa block
in use
(un lambda è passato come argomento qui). Al termine del blocco, puoi essere sicuro che FileInputStream
è stato chiuso.