java - 为什么 Java 允许在旧值和新值都为空时触发属性更改
问题描述
当两个值(旧的和新的)都为空时,该类PropertyChangeSupport
会触发。PropertyChangeEvent
有人可以解释一下这种行为的原因是什么吗?我的一些同事将此行为用于事件驱动的操作,但我认为这是对属性更改模式的滥用。我是对的还是我误解了什么?
我的意思是这行代码:
propertyChangeSupport.firePropertyChange(XY_PROPERTY, null, null);
解决方案
我认为,这是一个哲学问题——null 不是“正常”值,null 表示“未知”,“未知”不能与另一个“未知”进行比较,所以如果将属性值从“未知”更改为“未知”,它是一个新的“未知”值。在数据库中也很相似——NULL 总是不等于 NULL。
来自 Bean 规范:“如果不知道它们的真实值,则可以为旧值和新值提供空值。”</p>
Bean 规范中的另一个原因:“事件源可能会发送一个空对象作为名称,以指示其属性是否已更改的任意集合。在这种情况下,旧值和新值也应该为空。”
有关更多详细信息,您可以查看 2002 年的开放 jdk 问题 4763463:(https://bugs.openjdk.java.net/browse/JDK-4763463)
我认为,这对开发来说不是很舒服,但确实如此。我们不能改变它:-(
推荐阅读
- angular - 在角度中,如何实例化在其构造函数中注入服务的类
- mysql - 在 SQL group by 语句中,显示匹配的行字段之一
- android - java.lang.ArrayIndexOutOfBoundsException 使用 tensorflow 进行画廊图像分类
- windows - Windows 上适用于 Python 3.6 的小型编译器
- cmake - CMake 测试我是否处于脚本模式
- python - Nginx 不为在 uwsgi 上运行的 django 项目提供服务
- java - 如何在 EclipseLink 中级联 @JoinFetch?
- python - 打印文件中包含字符串的行
- javascript - 我正在学习编码,有人可以告诉我有什么问题吗?
- r - 在特定字符值之后,R中的多个字符串拆分