问题:为什么用“oldValue”调用ChangeListener ObservableMap是newValue的副本?
import javafx.beans.property.SimpleMapProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableMap; public class ObservableMapExample { SimpleMapProperty map; class MyChangeListener implements ChangeListener> { @Override public void changed(ObservableValue> changed, ObservableMap oldValue, ObservableMap newValue) { System.out.println("changed "+changed+" old:"+oldValue+" new:"+newValue); } } ObservableMapExample() { map = new SimpleMapProperty(); map.setValue(new SimpleMapProperty(FXCollections.observableHashMap())); map.addListener(new MyChangeListener()); map.put("a", "1"); map.put("b", "2"); map.put("b", "3"); } public static void main(String[] args) { System.out.println("ObservableMapExample"); new ObservableMapExample(); } }
输出:
ObservableMapExample changed MapProperty [value: MapProperty [value: {a=1}]] old:MapProperty [value: {a=1}] new:MapProperty [value: {a=1}] changed MapProperty [value: MapProperty [value: {a=1, b=2}]] old:MapProperty [value: {a=1, b=2}] new:MapProperty [value: {a=1, b=2}] changed MapProperty [value: MapProperty [value: {a=1, b=3}]] old:MapProperty [value: {a=1, b=3}] new:MapProperty [value: {a=1, b=3}]
因为值本身不会改变,所以它与您在添加键值对之前设置的SimpleMapProperty
相同。
如果您单步浏览代码,您将在com中找到这段代码。太阳javafx。结合MapExpressionHelper
:
@Override
protected void fireValueChangedEvent(MapChangeListener.Change<? extends K, ? extends V> change) {
listener.changed(observable, currentValue, currentValue);
}
ChangeListener
只能通知您映射已更改,但不能告诉您更改了什么,因为值就是映射。
但是,如果您使用新的SimpleApproperty
对象再次调用setValue
,您将看到您的ChangeListener
确实为oldValue
和newValue
获得了不同的对象,因为现在值本身已经更改(不仅仅是修改)。
问题:为什么用“oldValue”调用ChangeListener ObservableMap是NewValue的副本? 输出:
本文向大家介绍深入理解vue.js中$watch的oldvalue与newValue,包括了深入理解vue.js中$watch的oldvalue与newValue的使用技巧和注意事项,需要的朋友参考一下 $watch中的oldvalue和newValue 大家都知道,在vue.js中给我们提供了$watch的方法来做对象变化的监听,而且在callback中会返回两个对象,分别是oldValue和n
我想知道是否可以使用来填充?我使用了而不是,因为我需要经常添加和删除,所以我需要最小化成本。 我的hashMap使用一个大整数作为键字段,一个具有许多属性的类型作为值字段。在我的tableView中,我只想显示每个属性都有一列的值。我希望你说清楚了 谢谢
嗨,我有collectionView,在我的自定义单元格中有一个radioButton。我在我的集合视图的cellforAt函数中分配了cell.radioButton.tag=indexPath.Row。然后,我创建了一个属性观察器,如下所示。我点击了不同的数据,但是oldValue用相同的值打印。(你可以在照片中看到我点击了shooter和strategy。)
跳过值无效时: 问题:和是,因此无法正确重写。 问题:如何获得不执行检查的类型? 这个问题和这个问题有关。
问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首