gpt4 book ai didi

kotlin - Kotlin 中构造函数参数的生命周期

转载 作者:行者123 更新时间:2023-12-04 02:28:03 26 4
gpt4 key购买 nike

我想了解 Kotlin 中构造函数参数的生命周期。给定以下代码,FooFactory 类实例何时可供垃圾收集器收集?

由于 FooFactory 的使用被延迟了,运行时会知道什么时候释放它吗?

或者如果编译器不知道何时释放 FooFactory 并且它将永远存在,这是否会造成泄漏?


class Foo {
fun doStuff() {}
}

class FooFactory {
fun getFoo() : Foo {
return Foo()
}
}

class User(factory: FooFactory) {
val x: Foo by lazy {
factory.getFoo()
}
}

val user = User(FooFactory())

Thread.sleep(100)

user.x.doStuff()

Thread.sleep(100)

最佳答案

如果您查看使用 SynchronizedLazyImpllazy 委托(delegate)的实现,您将看到初始化 lambda 值一旦被设置为 null被计算:

val typedValue = initializer!!()
_value = typedValue
initializer = null

所以通过这一行:

user.x.doStuff()

FooFactory 符合垃圾回收条件。但是,如果从未访问过 x,则只有在包含 User 的对象被垃圾回收后,才会对 FooFactory 进行垃圾回收。

关于kotlin - Kotlin 中构造函数参数的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66046422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com