Kotlin编程语言中的析构函数
我是Kotlin的新手,已经在kotlin上写了一个类来执行数据库操作
我已经使用init在构造函数中定义了数据库连接,但是我想使用析构函数关闭数据库连接。
任何想法如何使用kotlin析构函数来实现这一点?
目前我已经写了一个单独的函数来关闭连接,我想要像使用任何其他编程语言,如PHP等使用析构函数
处理需要在Kotlin中关闭的资源
您可以使您的数据库包装扩展可Closeable
。 你可以像这样使用它。
val result = MyResource().use { resource -> resource.doThing(); }
这种方式在使用块内的资源将可用,然后你会得到结果,这是什么doThing()
返回,并且您的资源将被关闭。 由于您尚未将其存储在variables中,因此也可以避免在资源关闭后意外使用该资源。
为什么要避免finalize
Finalize是不安全的, 这描述了他们的一些问题,比如:
- 他们不能保证运行
- 当他们运行时,可能会延迟运行
链接总结了这样的问题:
终结者是不可预知的,往往是危险的,通常是不必要的。 它们的使用会导致不稳定的行为,糟糕的性能和便携性问题。 Finalizer有一些有效的用法,我们稍后会在这个项目中介绍,但作为一个经验法则,你应该避免finalizers。
提醒C ++程序员不要把终结器看作Java的C ++析构函数的类比。 在C ++中,析构函数是回收与对象相关的资源的正常方式,这是构造函数的必要对象。 在Java中,当垃圾收集器变得不可达时,垃圾收集器回收与对象相关联的存储,不需要编程人员的特别努力。 C ++析构函数也被用来回收其他非内存资源。 在Java中,try-finally块通常用于此目的。
如果你真的需要使用finalize
这个链接显示如何重写finalize,但除非绝对必要,否则这是一个糟糕的主意。