我知道Files.newDirectoryStream(directory).use { ... }一旦大括号中的函数完成,就会自动关闭流。
.forEach { ... }如果我使用而不是,流也会关闭吗.use { ... }?
这更像是一个 Java 问题,而不是 Kotlin 问题,因为这涉及 Java API 中定义的方法。Kotlin 允许您在此处使用,forEach因为DirectoryStream是Iterable,它定义了forEach,但这不会关闭此流。
如记录在DirectoryStream:
A
DirectoryStream在创建时打开,并通过调用 close 方法关闭。关闭目录流会释放与该流关联的所有资源。未能关闭流可能会导致资源泄漏。try-with-resources 语句提供了一个有用的构造来确保流关闭 [...]
换句话说,当您使用目录流时,您有责任关闭它。这意味着在 Java 中,您需要使用 try-with-resources (或显式调用 close),在 Kotlin 中这意味着您应该使用use:
Files.newDirectoryStream(directory).use {
it.forEach { ... }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |