我正在做一些奇怪的事情,但我有一种短暂的感觉,这应该是可能的。
Kotlin 可以做到以下吗?(它可以编译但不起作用(
var delegatedProp: (Int) -> Unit by Delegates.observable({ a-> Unit }) { _, _, newVal ->
//This is never raised
//Secondly how should I access the given Int ?
//newVal.a doesn't seem to compile
}
我的想法是,一旦我调用委托 Prop(10(,可观察量就会调用,我将能够访问 newVal.a。
这将成功编译,但永远不会调用可观察量
设置 delegatedProp
时,第二个 lambda 将被调用,即
x.delegatedProp = { print(it) }
({ print(it) }
只是 (Int) -> Unit
类型的一个例子(。newVal
将是您将属性设置为的函数,在本例中为 { print(it) }
.所以它没有.a
.
如果你想在调用delegatedProp(10)
时做点什么,你只需要...将这些操作放入函数中:
val delegatedProp: (Int) -> Unit = { a -> /* do whatever you wanted to do with newVal.a */ }
如果你想delegatedProp
成为一个var
,但要继续做你的"额外"操作,无论它被分配给什么,最简单的方法可能是自定义getter:
var delegatedProp: (Int) -> Unit = { a -> Unit }
get() = { a ->
/* whatever you want to do with a */
field(a)
}
或者一个 setter:它不会在每次访问时创建一个新的 lambda,但要么复制一些代码,要么需要至少显式设置一次,而不仅仅是初始化。