いきなり結論
残念ながらkotlinにはtry-with-resourcesそのものはないです。
その代わり、同等のfunction(厳密にはextension function: 拡張関数)としてuse
があります。
java
try (OutputStream ost = Files.newOutputStream(path)) {
FileCopyUtils.copy(inst, ost);
} catch (Exception e) {
e.printStackTrace();
}
これが↓
kotlin
try {
Files.newOutputStream(path).use { ost ->
FileCopyUtils.copy(inst, ost)
}
} catch (e: Exception) {
e.printStackTrace()
}
こうなります。
個人的にはuse
の中身が1行であればFiles.newOutputStream(path).use { ost -> FileCopyUtils.copy(inst, ost) }
みたいに改行せずに書くことが多いです。
kotlinはjavaに比べてスッキリと書けるのところが好きなので。
複数resourceの場合
複数のresourceを使いたい場合はuse
をchainできます。
kotlin
try {
Files.newOutputStream(path).use { ost ->
Files.newInputStream(path).use { inst ->
FileCopyUtils.copy(inst, ost)
}
}
} catch (e: Exception) {
e.printStackTrace()
}
あまりchainしすぎるとネストが深くなるのが玉に瑕。
参考
- Try-with-resources in Kotlin | Baeldung
-
kotlin/Closeable.kt at master · JetBrains/kotlin
- 参考っていうか
use
の実装。気になったら一度目を通しても良いかも
- 参考っていうか