【发布时间】:2017-08-18 13:53:13
【问题描述】:
如果可以侦听对象属性值的变化,我无法从 java 文档中获取信息。假设我的对象只有一个 int 属性字段。我需要立即执行一个动作,我的对象改变了它的状态。有可能吗?
【问题讨论】:
标签: java event-handling
如果可以侦听对象属性值的变化,我无法从 java 文档中获取信息。假设我的对象只有一个 int 属性字段。我需要立即执行一个动作,我的对象改变了它的状态。有可能吗?
【问题讨论】:
标签: java event-handling
您想研究 Java 中的观察者/可观察对象。他们将允许您做您需要做的事情。
网上有很多关于它的。
这是一个小存根:http://docs.oracle.com/javase/7/docs/api/java/util/Observer.html
【讨论】:
如果此对象不是您的,并且您正在为对象的属性寻找各种事件侦听器,那么不,没有对象属性侦听器。
但是,如果您可以修改对象的来源,我假设您正在使用 getter 和 setter。所以,你会有类似...
public void setIntegerValue(int num){
this.num = num;
}
最有效的做法是在 setter 中添加某种逻辑,以在整数 num 更改时执行您的函数:
public void setIntegerValue(int num){
this.num = num;
yourFunction(); // Let your program know that num has been modified
}
【讨论】:
如果您使用 setter 方法,您可以添加对其他方法的调用。
首先,将您的财产设为私有。
private int myProp;
然后,添加一个 setter。
public void setMyProp(int myProp) {
boolean isVariableChanged = myProp != this.myProp;
this.myProp = myProp;
// do other things
}
在这种情况下,如果变量发生变化,则方法中的布尔值将为真,如果您想防止在变量变回其当前值时触发方法,则可以使用它。
你还需要一个吸气剂。
public int getMyProp() {
return myProp;
}
一般来说,当类的实现发生变化时,建议使用 getter 和 setter 以使代码更易于维护。
但是,它们还使您能够将 getter 和 setter 用作伪侦听器。
【讨论】: