我正在做一些奇怪的事情,但我有一种转瞬即逝的感觉,这应该是可能的。
用科特林做下面的可能吗?(它编译但不起作用)
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
}我不认为一旦我调用了delegatedProp(10),可观察到的就会调用,我就能够访问newVal.a。
这将成功编译,但从未调用可观察到的。
发布于 2019-06-12 14:22:53
设置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,但是要么重复一些代码,要么需要显式地设置至少一次,而不仅仅是初始化。
https://stackoverflow.com/questions/56563540
复制相似问题