为什么 Java 允许在旧值和新值都为 null 时触发 属性 更改
Why Java allows to fire property change when old and new values are null
当两个值(旧值和新值)都为空时,class PropertyChangeSupport
会触发 PropertyChangeEvent
。有人可以向我解释这种行为的原因是什么吗?我的一些同事将此行为用于事件驱动的操作,但我认为这是对 属性 更改模式的误用。我是对的还是我误解了什么?
我的意思是这行代码:
propertyChangeSupport.firePropertyChange(XY_PROPERTY, null, null);
我认为,这是一个哲学问题——null 不是一个“正常”值,null 表示“未知”,而“未知”不能与另一个“未知”相比较,所以如果你改变 属性 值从“未知”到“未知”,这是一个新的“未知”值。它在数据库中非常相似 - NULL 始终不等于 NULL。
来自 Bean 规范:“如果不知道旧值和新值的真实值,则可以为它们提供空值。”
Bean 规范中的另一个原因:“事件源可能会发送一个空对象作为名称,以指示任意一组属性是否已更改。在这种情况下,旧值和新值也应为空。"
有关更多详细信息,您可以查看 2002 年打开的 jdk 问题 4763463:(https://bugs.openjdk.java.net/browse/JDK-4763463)
我觉得,开发起来不是很舒服,但就是这样。我们无法更改它:-(
当两个值(旧值和新值)都为空时,class PropertyChangeSupport
会触发 PropertyChangeEvent
。有人可以向我解释这种行为的原因是什么吗?我的一些同事将此行为用于事件驱动的操作,但我认为这是对 属性 更改模式的误用。我是对的还是我误解了什么?
我的意思是这行代码:
propertyChangeSupport.firePropertyChange(XY_PROPERTY, null, null);
我认为,这是一个哲学问题——null 不是一个“正常”值,null 表示“未知”,而“未知”不能与另一个“未知”相比较,所以如果你改变 属性 值从“未知”到“未知”,这是一个新的“未知”值。它在数据库中非常相似 - NULL 始终不等于 NULL。
来自 Bean 规范:“如果不知道旧值和新值的真实值,则可以为它们提供空值。”
Bean 规范中的另一个原因:“事件源可能会发送一个空对象作为名称,以指示任意一组属性是否已更改。在这种情况下,旧值和新值也应为空。"
有关更多详细信息,您可以查看 2002 年打开的 jdk 问题 4763463:(https://bugs.openjdk.java.net/browse/JDK-4763463)
我觉得,开发起来不是很舒服,但就是这样。我们无法更改它:-(