我有一个带有这个签名的 Kotlin 函数:
fun registerDisposer(obj: Any, disposer: Closeable)
该函数所做的是附加disposer
到一个幻像引用并安排它在obj
垃圾收集时关闭(即当幻像引用对象入队时)。的类obj
应该这样称呼它:
class Holder(private val res1: Closeable, private val res2: Closeable) {
init {
registerDisposer(this, object: Closeable {
private val res1 = this@Holder.res1
private val res2 = this@Holder.res2
override fun close() {
res1.close()
res2.close()
}
})
}
}
Closeable
(让我们忽略使用 general s依赖 this 是否是一个好主意;有问题的实际资源是由本机/JNI 代码管理的指针——我正在尝试遵循Hans Boehm 的建议。但所有这些都与这个问题。)
我担心这种设计很容易无意中传递this
从外部范围捕获的对象,创建引用循环并完全防止对象被垃圾收集:
registerDisposer(this, Closeable {
this.res1.close()
this.res2.close()
})
有没有我可以添加到disposer
参数中的注释,在这种情况下会触发警告?