Javaのtry-with-resourcesをご存知でしょうか。
try(InputStream inputStream = new FileInputStream("test")){
// 処理
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
こんな感じでAutoClosableやClosableを実装しているクラスをtryの()で宣言すると自動的にclose()を呼び出してくれるような書き方のことです。
Kotlinではどうするか
実はKotlinではこの構文は使えません。書こうとするとコンパイルエラーになってしまいます。
そこでKotlinにはClosableには拡張関数 useが用意されていて、以下のように書くことができます。
try {
FileInputStream("test").use {
// 処理
}
} catch (e: FileNotFoundException){
e.printStackTrace()
} catch (e: IOException){
e.printStackTrace()
}
なぜできるか?
useの中身をみてみるときちんとcloseされていることがわかります。
AutoClosable.kt
やClosable.kt
で実装されています。