Variables 使用PropertyChangeSupport(例如,可观察、委派)获得变量更改通知
我有这样的问题,我想听听变量的变化。 让我们假设我已经初始化了Variables 使用PropertyChangeSupport(例如,可观察、委派)获得变量更改通知,variables,kotlin,delegates,observable,Variables,Kotlin,Delegates,Observable,我有这样的问题,我想听听变量的变化。 让我们假设我已经初始化了var foo:Int=10,在代码的某个地方它将其值更改为其他值让我们假设foo=99这是我在kotlin中的代码片段 var foo:Int=10 private val changeSupport: PropertyChangeSupport? = PropertyChangeSupport(foo) val observer = { property: KProperty<*&
var foo:Int=10
,在代码的某个地方它将其值更改为其他值让我们假设foo=99
这是我在kotlin中的代码片段
var foo:Int=10
private val changeSupport: PropertyChangeSupport? = PropertyChangeSupport(foo)
val observer = {
property: KProperty<*>,
oldValue: Int?,
newValue: Int? -> changeSupport!!.firePropertyChange(property.name, oldValue, newValue)
}
var oof: Int? by Delegates.observable(foo, observer)
changeSupport!!.addPropertyChangeListener { event ->
Log.d("loggg","Property [${event.propertyName}] changed " + "from [${event.oldValue}] to [${event.newValue}]")
}
var foo:Int=10
私有val变更支持:PropertyChangeSupport?=PropertyChangeSupport(foo)
val观察员={
财产:KProperty,
旧值:Int?,
newValue:Int?->changeSupport!!.firePropertyChange(property.name、oldValue、newValue)
}
变量oof:Int?由代表提供。可观察(foo,观察员)
更改支持!!。addPropertyChangeListener{event->
Log.d(“loggg”,“属性[${event.propertyName}]将“+”从[${event.oldValue}]更改为[${event.newValue}]”)
}
因此,当我在代码的某个地方写入foo=99
时,我必须接收日志。我尝试了很多东西,但没有成功。
我错过什么了吗
您试图为您的属性
foo
而不是实例(包含属性foo
)提供PropertyChangeSupport
)
例如
PropertyChangeSupport(this)
您试图为您的属性foo
而不是实例(包含属性foo
)提供PropertyChangeSupport
)
例如
PropertyChangeSupport(this)
因此,解决方案比我想象的更简单。
我必须首先用delegate和observable赋值变量,如下所示
var foo:Int? by Delegates.observable(10) { property, oldValue, newValue ->
Log.d("loggg","gggol")
}
每次我调用foo=something时,它都会记录以下输出。
谢谢。)所以解决方案比我想象的简单。 我必须首先用delegate和observable赋值变量,如下所示
var foo:Int? by Delegates.observable(10) { property, oldValue, newValue ->
Log.d("loggg","gggol")
}
每次我调用foo=something时,它都会记录以下输出。
谢谢。)属性侦听器处理与变量不完全相同的属性。它们有(特殊的,通常是隐式的)方法包装它们的值的访问和变异:正是这些访问器和变异器方法用于实现属性侦听器。如果要使用属性侦听器侦听对变量的更改,则必须确保变量是属性。也就是说,它是一个类的成员,而不是方法或类似的东西的本地成员。你的问题不清楚:它已经是一个属性了吗?不,它是一个简单的变量,在应用程序运行时改变值,然后如果值从a变为Z,例如,我必须显示一些土司。如何实现使其工作?属性侦听器处理与变量不完全相同的属性。它们有(特殊的,通常是隐式的)方法包装它们的值的访问和变异:正是这些访问器和变异器方法用于实现属性侦听器。如果要使用属性侦听器侦听对变量的更改,则必须确保变量是属性。也就是说,它是一个类的成员,而不是方法或类似的东西的本地成员。你的问题不清楚:它已经是一个属性了吗?不,它是一个简单的变量,在应用程序运行时改变值,然后如果值从a变为Z,例如,我必须显示一些土司。我该如何实现才能使其工作?因此,仅仅听取代码中简单的变量更改是无法实现的?@ArmenHovhannisian有一种方法(例如,正如您已经描述的)。我只是想解释一下,
PropertyChangeSupport
的使用方式是错误的。这是一个直接回答“我遗漏了什么”的观点好的,谢谢你,我明白如果你想使用PropertyChangeSupport,你应该有一个单一的对象类,并将其用于其属性。因此,没有办法只听代码中简单的变量更改?@ArmenHovhannisian有一种方法(例如,正如您已经描述的那样)。我只想解释一下PropertyChangeSupport
的使用方式是错误的。这是一个直接回答“我遗漏了什么吗”的观点。好的,谢谢。我理解如果您想使用PropertyChangeSupport,您应该使用单个对象类并将其用于其属性。