如果没有 getValue 和 setValue,Kotlin 的“惰性”实现如何工作?

Ale*_*lex 2 delegates properties kotlin

在 Kotlin 中,具有预设自定义获取/设置行为的属性是使用委托属性来实现的。根据文档,属性的委托只是一个带有getValue方法setValue的类

但是当我查看 的实现内部lazy时,我只找到了value属性。所以我自己尝试以这种方式实现委托。它无法编译,因为getValuesetValue没有明确实现。那么正式实施lazy工作又如何呢?

Swe*_*per 6

getValueLazy<T>被声明为所有s上的扩展函数(是的,这也有效!) :

来源

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

正如您所看到的,它返回value,这正是您所期望的。

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

var foo by lazy { 10 } // compiler error
Run Code Online (Sandbox Code Playgroud)

毕竟,这无论如何也没有多大意义。