gpt4 book ai didi

kotlin - 当我们有属性 setter 时, `Delegates.observable` 的用例是什么?

转载 作者:IT老高 更新时间:2023-10-28 13:39:46 26 4
gpt4 key购买 nike

当我们只能使用属性 setter 时,Delegates.observable 的用例是什么?

 var foo by Delegates.observable("hell0") { prop, old, new ->
// react to changes in foo
}

var bar = "hello"
set(value) {
field = value
// react to changes in bar
// we can also do validation, set something like `value*2` to field, etc.
}

最佳答案

如果您希望多个属性以相同的方式对修改使用react,则属性 setter 需要更多的代码重复:

var foo: Foo = Foo()
set(value) {
println("foo = $value")
field = value
}

var bar: Bar = Bar()
set(value) {
println("bar = $value")
field = value
}

反过来,委托(delegate)旨在允许重用属性访问器逻辑,如下所示:

fun <T> printDelegate(init: T) = 
Delegates.observable(init) { prop, _, new ->
println("${prop.name} = $new")
}

val foo: Foo by printDelegate(Foo())
val bar: Bar by printDelegate(Bar())

关于kotlin - 当我们有属性 setter 时, `Delegates.observable` 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960549/

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