【发布时间】:2018-07-27 21:18:19
【问题描述】:
问题:为什么用“oldValue”调用ChangeListener ObservableMap 是newValue 的副本?
导入 javafx.beans.property.SimpleMapProperty; 导入 javafx.beans.value.ChangeListener; 导入 javafx.beans.value.ObservableValue; 导入 javafx.collections.FXCollections; 导入 javafx.collections.ObservableMap; 公共类 ObservableMapExample { SimpleMap 属性图; 类 MyChangeListener 实现 ChangeListener> { @覆盖 公共无效更改(ObservableValue> 更改, ObservableMap oldValue, ObservableMap newValue) { System.out.println("改变了"+changed+" old:"+oldValue+" new:"+newValue); } } ObservableMapExample() { 地图 = 新的 SimpleMapProperty(); map.setValue(new SimpleMapProperty(FXCollections.observableHashMap())); map.addListener(new MyChangeListener()); map.put("a", "1"); map.put("b", "2"); map.put("b", "3"); } 公共静态无效主要(字符串[]参数){ System.out.println("ObservableMapExample"); 新的 ObservableMapExample(); } }输出:
ObservableMap示例 更改 MapProperty [值:MapProperty [值:{a=1}]] 旧:MapProperty [值:{a=1}] 新:MapProperty [值:{a=1}] 更改 MapProperty [值:MapProperty [值:{a=1,b=2}]] 旧:MapProperty [值:{a=1,b=2}] 新:MapProperty [值:{a=1,b=2 }] 更改 MapProperty [值:MapProperty [值:{a=1,b=3}]] 旧:MapProperty [值:{a=1,b=3}] 新:MapProperty [值:{a=1,b=3 }]【问题讨论】:
-
它不是用旧值的副本调用的:它是用
oldValue == newValue调用的。如果这是预期的行为,我在 javadocs 中找不到任何信息,因为它没有定义更改属性值的含义。如果这意味着发生了某些事件,其效果是该事件之前的属性值的副本将不再被视为等于新值,那么观察到的行为确实是正确的......