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 }