- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我是 Kotlin 新手,在 kotlin 中写了一个类来执行数据库操作
我已经使用 init 在构造函数中定义了数据库连接,但我想使用析构函数关闭数据库连接。
知道如何使用 kotlin 析构函数来实现这一点吗?
目前我已经编写了一个单独的函数来关闭连接,我希望它像 php 等任何其他编程语言一样使用析构函数
最佳答案
您可以使您的数据库包装器扩展 Closeable
.然后你可以像这样使用它。
val result = MyResource().use { resource ->
resource.doThing();
}
这样在 use block 中你的资源将可用,之后你会得到结果,这是 doThing()
返回的结果,你的资源将被关闭。由于您没有将其存储在变量中,因此您也可以避免在关闭后意外使用资源。
finalize
Finalise 不安全,this描述了他们的一些问题,例如:
链接总结了这样的问题:
Finalizers are unpredictable, often dangerous, and generally unnecessary. Their use can cause erratic behavior, poor performance, and portability problems. Finalizers have a few valid uses, which we’ll cover later in this item, but as a rule of thumb, you should avoid finalizers.
C++ programmers are cautioned not to think of finalizers as Java’s analog of C++ destructors. In C++, destructors are the normal way to reclaim the resources associated with an object, a necessary counterpart to constructors. In Java, the garbage collector reclaims the storage associated with an object when it becomes unreachable, requiring no special effort on the part of the programmer. C++ destructors are also used to reclaim other nonmemory resources. In Java, the try-finally block is generally used for this purpose.
This link展示了如何覆盖 finalize,但除非绝对必要,否则这是一个坏主意。
关于kotlin - Kotlin 编程语言中的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48623441/
我是一名优秀的程序员,十分优秀!