使用PropertyChangeSupport获取变量通知(例如,observable,delegate)

时间:2018-05-02 20:20:36

标签: 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<*>,
                    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}]")
                }

因此,在代码的某处,我写foo = 99我必须收到日志。我尝试了很多我遵循这篇文章但没有成功的东西。 我错过了什么吗?

How to create change listener for variable?

http://kotlination.com/kotlin/kotlin-observable-property-delegated-property https://www.javalobby.org/java/forums/t19476.html

2 个答案:

答案 0 :(得分:0)

您正在尝试为您的媒体资源PropertyChangeSupport而不是实例(包含媒体资源foo)提供foo

例如PropertyChangeSupport(this)docs

答案 1 :(得分:0)

所以解决方案比我想象的更简单。 我必须首先为变量分配委托和observable,如下所示。

 var foo:Int? by Delegates.observable(10) { property, oldValue, newValue ->

            Log.d("loggg","gggol")

        }

每当我调用foo = something时,它会记录以下输出。 感谢。)