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 useimplementazioni
@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 blockche viene eseguita in a try. Come con try-with-resources in Java, Closeableviene chiuso in a finally.
Anche i fallimenti che si verificano all'interno blockportano a closeesecuzioni, 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' useestensione è disponibile su qualsiasi Closeabletipo, 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 blockin use(un lambda è passato come argomento qui). Al termine del blocco, puoi essere sicuro che FileInputStreamè stato chiuso.