setValue所在位置是kotlin.setValue,其相关用法介绍如下。

用法一

operator fun <V> KMutableProperty0<V>.setValue(
    thisRef: Any?, 
    property: KProperty<*>, 
    value: V)

一个扩展运算符,允许将类型为 V 的可变属性委托给对相同类型 V 的可变属性的属性引用。

接收者

V 类型的可变属性的属性引用。引用没有接收器,即它引用顶级属性或将接收器绑定到它。

例子:

class Login(val username: String, var incorrectAttemptCounter: Int = 0)
val defaultLogin = Login("Admin")
var defaultLoginAttempts by defaultLogin::incorrectAttemptCounter
// equivalent to
var defaultLoginAttempts: Int
    get() = defaultLogin.incorrectAttemptCounter
    set(value) { defaultLogin.incorrectAttemptCounter = value }

用法二

operator fun <T, V> KMutableProperty1<T, V>.setValue(
    thisRef: T, 
    property: KProperty<*>, 
    value: V)

扩展运算符,允许将类型为 V 的可变成员或扩展属性委托给对相同类型 V 的成员或扩展可变属性的属性引用。

接收者

V 类型或其子类型的只读或可变属性的属性引用。该引用具有类型为 T 的未绑定接收器。

例子:

class Login(val username: String, var incorrectAttemptCounter: Int)
var Login.attempts by Login::incorrectAttemptCounter
// equivalent to
var Login.attempts: Int
    get() = this.incorrectAttemptCounter
    set(value) { this.incorrectAttemptCounter = value }