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,但除非绝对必要,否则这是一个糟糕的主意。

Interesting Posts