首页 > 解决方案 > 为什么 Java 允许在旧值和新值都为空时触发属性更改

问题描述

当两个值(旧的和新的)都为空时,该类PropertyChangeSupport会触发。PropertyChangeEvent有人可以解释一下这种行为的原因是什么吗?我的一些同事将此行为用于事件驱动的操作,但我认为这是对属性更改模式的滥用。我是对的还是我误解了什么?

我的意思是这行代码:

propertyChangeSupport.firePropertyChange(XY_PROPERTY, null, null);

标签: javajavabeans

解决方案


我认为,这是一个哲学问题——null 不是“正常”值,null 表示“未知”,“未知”不能与另一个“未知”进行比较,所以如果将属性值从“未知”更改为“未知”,它是一个新的“未知”值。在数据库中也很相似——NULL 总是不等于 NULL。

来自 Bean 规范:“如果不知道它们的真实值,则可以为旧值和新值提供空值。”</p>

Bean 规范中的另一个原因:“事件源可能会发送一个空对象作为名称,以指示其属性是否已更改的任意集合。在这种情况下,旧值和新值也应该为空。”

有关更多详细信息,您可以查看 2002 年的开放 jdk 问题 4763463:(https://bugs.openjdk.java.net/browse/JDK-4763463

我认为,这对开发来说不是很舒服,但确实如此。我们不能改变它:-(


推荐阅读