Kotlin中的Try-with-resources


Kotlin 在内存管理方面非常高效。与 Java 不同,Kotlin 开发者无需显式管理内存。我们有不同类型的内存管理技术,而**Try-with-resource** 就是其中之一。在 Kotlin 中,我们有一个名为“**use**”的函数,它可以自动承担管理资源的负担。这是 Kotlin 提供的**标准库**函数的一部分。

根据 Kotlin 文档,**use()** 被定义为所有可关闭类型上的泛型扩展。其实现如下所示:

public inline fun <T : Closeable?, R>T.use(block: (T) -> R): R {}
  • 在上图函数中,定义块是处理**可关闭**资源的函数。

  • **fun** 是函数调用,它返回**block** 函数的结果。

示例:use() 实现

在这个例子中,我们将看到如何使用 use() 函数来实现**try-with-resources**。我们将对**bufferedReader()** 使用**use()** 方法来读取“**myFile.txt**”的内容。

import java.io.File

fun main(args: Array<String>) {
   val readMyFile = File("myFile.txt")
   readMyFile .bufferedReader().use{
      println(it.readText())
   }
}

输出

执行上述代码段后,它应该读取文件对象中提供的所有文件内容。如果您在 Kotlin playground (https://play.kotlinlang.org/) 中运行它,它会抛出安全异常,因为您没有权限从 playground 服务器读取。

Exception in thread "main" java.io.FileNotFoundException: myFile.txt (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at MainKt.main(main.kt:4)

更新于:2021年11月23日

585 次浏览

启动你的职业生涯

通过完成课程获得认证

开始
广告