Careeroza
Closing Resources with use
use { }
Objects that hold resources (files, streams, database cursors) implement Closeable. use { } closes them automatically, even if an exception happens - Kotlin's version of Java try-with-resources.
Example
import java.io.BufferedReader
import java.io.Closeable
import java.io.StringReader
class DbConnection(val name: String) : Closeable {
init { println("Open $name") }
fun query(sql: String) = "result of '$sql'"
override fun close() = println("Close $name")
}
fun main() {
val csv = "id,name\n1,Asha\n2,Ravi"
val lines = BufferedReader(StringReader(csv)).use { reader -> reader.readLines() }
println(lines)
try {
DbConnection("orders-db").use { db ->
println(db.query("SELECT * FROM orders"))
throw IllegalStateException("network dropped")
}
} catch (e: IllegalStateException) {
println("Caught: ${e.message}")
}
}Output
[id,name, 1,Asha, 2,Ravi] Open orders-db result of 'SELECT * FROM orders' Close orders-db Caught: network dropped