在没有 getValue 和 setValue 的情况下,Kotlin 的“惰性”实现如何工作?

How does Kotlin's `lazy` implementation work without getValue and setValue?

在具有预设自定义 get/set 行为的 Kotlin 属性中,使用 delegated properties 实现。根据文档,属性 的委托只是具有 getValuesetValue 方法的 class

但是当我往里看时the implementation of lazy,我只发现了value属性。所以我自己尝试以这种方式实现委托。它编译失败,因为 getValuesetValue 没有明确实现。那么lazy的官方实现是如何工作的呢?

getValue 在所有 Lazy<T> 上声明为扩展函数(是的,它也有效!):

Source:

public inline operator fun <T> Lazy<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value

如您所见,它 returns value,这正是您所期望的。

没有setValue,没关系。这只是意味着您不能将 lazy { ... } 用作 var 的 属性 委托,而且您确实不能:

var foo by lazy { 10 } // compiler error

毕竟这也没什么意义