gpt4 book ai didi

kotlin - 在 Kotlin 中使用 Delegate 设置和获取类字段

转载 作者:行者123 更新时间:2023-12-03 21:43:25 27 4
gpt4 key购买 nike

如何将 Delegate 用于类字段 getter 和 setter ?尝试在 Kotlin 中设置和获取字段(在获取和设置时可能需要更多执行)。

import kotlin.reflect.KProperty

class Example {
var p: String by Delegate()

override fun toString(): String {
return "toString:" + p
}
}

class Delegate() {
operator fun getValue(thisRef: Any?, prop: KProperty<*>): String {
//Something like this :prop.get(thisRef)
return "value"
}

operator fun setValue(thisRef: Any?, prop: KProperty<*>, value: String) {

//something like this : prop.set(thisRef, value)
}
}

fun main(args: Array<String>) {
val e = Example()
println(e.p)//blank output
e.p = "NEW"
println(e.p)//NEW should be the output
}

教程: https://try.kotlinlang.org/#/Examples/Delegated%20properties/Custom%20delegate/Custom%20delegate.kt

最佳答案

默认情况下,您不会获得委托(delegate)值的支持字段,因为它可能不存储实际值,或者它可能存储许多不同的值。如果要存储单个 String在这里,您可以在您的委托(delegate)中为它创建一个属性:

class Delegate {
private var myValue: String = ""

operator fun getValue(thisRef: Any?, prop: KProperty<*>): String {
return myValue
}

operator fun setValue(thisRef: Any?, prop: KProperty<*>, value: String) {
myValue = value
}
}

关于kotlin - 在 Kotlin 中使用 Delegate 设置和获取类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951111/

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