gpt4 book ai didi

android - kotlin 委托(delegate)属性,在 get() 方法中我如何访问该值?

转载 作者:IT老高 更新时间:2023-10-28 13:44:34 25 4
gpt4 key购买 nike

Kotlin 具有委托(delegate)属性,这是一个非常好的特性。但我正在弄清楚如何获取和设置这些值。假设我想获得委托(delegate)的属性(property)的值(value)。在 get() 方法中,我如何访问该值?

这是我如何实现的示例:

class Example() {
var p: String by DelegateExample()
}
class DelegateExample {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "${property.name} "
}

operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
println("${value.trim()} '${property.name.toUpperCase()} '")
}
}
fun delegate(): String {
val e = Example()
e.p = "NEW"
return e.p
}

我无法理解的主要问题是,如何将值设置为分配委托(delegate)类的实际属性。当我将"new"分配给属性 p 时,如何将该值存储到变量 p 或读取传递给 p 的新值用得到?我在这里缺少一些基本的东西吗?任何帮助都感激不尽。提前致谢。

最佳答案

只需在委托(delegate)中创建将保存值的属性

class DelegateExample {

private var value: String? = null

operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return value ?: throw IllegalStateException("Initalize me!")
}

operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
this.value = value
}
}

澄清一下 - 委托(delegate)不是值(value)持有者,它们是 get/set 操作的处理程序。如果你反编译你的 Example 类(工具 -> Kotlin -> Show Kotlin 字节码 -> 反编译),你可以看看它是如何工作的。

public final class Example {
// $FF: synthetic field
static final KProperty[] $$delegatedProperties = ...

@NotNull
private final DelegateExample p$delegate = new DelegateExample();

@NotNull
public final String getP() {
return (String)this.p$delegate.getValue(this, $$delegatedProperties[0]);
}

public final void setP(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
this.p$delegate.setValue(this, $$delegatedProperties[0], var1);
}
}

这里没有魔法,只是创建 DelegateExample 的实例及其 get/set 方法调用

关于android - kotlin 委托(delegate)属性,在 get() 方法中我如何访问该值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47634526/

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