首页 > 解决方案 > 预先触发 propertyChangeEvent 的危险

问题描述

在实际更改属性之前触发 propertyChangeEvent 有什么危险(如果有的话)?

目前我有很多看起来像这样的代码:

public void setConfidence (int newConfidence) {
    int old = confidence;
    confidence = newConfidence;
    pcs.firePropertyChange("confidence", old, confidence);
}

在更改属性之前触发事件会更漂亮,并且避免复制:

public void setConfidence (int newConfidence) {
    pcs.firePropertyChange("confidence", confidence, newConfidence);
    confidence = newConfidence;
}

在单线程应用程序中,预触发事件有什么危险吗?还是其他更喜欢在之后解雇的原因?

标签: javaswingevents

解决方案


在您的第二段代码中,您通知侦听器状态已更改,但实际上没有更改,这既不好也不安全。如果侦听器有自己的行为或状态变化,这取决于通知时出现的新状态怎么办?使用通知的主要规则之一是通知代码不需要知道侦听代码对信息的作用,而您的第二位代码不满足这一点。坚持第一种方式。


推荐阅读