【发布时间】:2019-08-02 10:07:46
【问题描述】:
当两个值(旧的和新的)都为空时,PropertyChangeSupport 类会触发 PropertyChangeEvent。有人可以解释一下这种行为的原因是什么吗?我的一些同事将此行为用于事件驱动的操作,但我认为这是对属性更改模式的滥用。我是对的还是我误解了什么?
我的意思是这行代码:
propertyChangeSupport.firePropertyChange(XY_PROPERTY, null, null);
【问题讨论】:
-
他们似乎只是使用了 beans 包中的一个旧错误,它允许这样做。通常,当使用相等的值调用时,不会触发该事件,但特别是对于空值,我看到的代码为
if (old == null || new == null || !old.equals(new)) { fire }。是的,这看起来像是一种误用——如果你想要自定义事件,你应该实现自定义事件。不幸的是,Java 的事件依赖于继承,PropertyChangeSupport占据了Observable机制的唯一槽。所以你不能同时拥有这两者,除非你的自定义事件Observable也应该是-aPropertyChangeSupport -
@M.Prokhorov 谢谢。我也看过这段代码。所以你认为这是一个 Java 错误,是为了功能(如微软)而设计的?