gpt4 book ai didi

kotlin - Kotlin 内置的 "lazy"函数是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 16:38:52 26 4
gpt4 key购买 nike

我想在我的 Kotlin 代码中尝试一些新的委托(delegate)属性。我在文档中发现的是,对于自定义委托(delegate)属性,我需要创建一个具有强制性方法的类 - getValue 和可选的 setValue,它们是文档中提到的接口(interface)的一部分:

You can create delegates as anonymous objects without creating new classes using the interfaces ReadOnlyProperty and ReadWriteProperty from the Kotlin standard library

我开始深入研究 Kotlin 的内置委托(delegate)函数。我研究了 lazy 函数的实现,如下所示:

public actual fun <T> lazy(initializer: () -> T): Lazy<T> = SynchronizedLazyImpl(initializer)

这就是我的问题所在:为什么它真的有效? Lazy 接口(interface)只有 value 属性和一些确定其初始化的方法值(value)。 SynchronizedLazyImpl 仅此而已。他们都没有getValuesetValue方法,为什么Kotlin不报错编译成功?

最佳答案

查看Lazy的源代码here ,你可以在第 37 行看到以下内容:

/**
* An extension to delegate a read-only property of type [T] to an instance of [Lazy].
*
* This extension allows to use instances of Lazy for property delegation:
* `val property: String by lazy { initializer }`
*/
@kotlin.internal.InlineOnly
public inline operator fun <T> Lazy<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value

基本上,Lazy 实例有一个 getValue 扩展函数,它只返回 value 属性。 SynchronizedLazyImpl 只是定义了 value 属性,getValue 是自动提供的。

关于kotlin - Kotlin 内置的 "lazy"函数是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64789880/

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