Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 使用PropertyChangeSupport(例如,可观察、委派)获得变量更改通知_Variables_Kotlin_Delegates_Observable - Fatal编程技术网

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,您应该使用单个对象类并将其用于其属性。