【发布时间】:2017-05-08 03:57:07
【问题描述】:
我有一个ObservableList<DataClass> someData,并附有一个ChangeListener(通过addListener)。该列表不时由后台线程更新。实际上不是 List 本身被更新,而是由线程返回的新 List 保存在成员 someData 中:
...
task.onSuccess(event -> setSomeData(task.getValue());
...
// standard setter generated by IntelliJ
public void setSomeData(ObservableList<DataClass> someData) {
this.someData = someData;
}
现在,当我使用标准设置器设置someData 时,数据本身在新列表中,好吧,但所有附加到旧列表的侦听器都消失了。我不想将整个 List 复制到我的旧 List 中,因为它可能包含大量元素。
我知道我可以将 Listeners 保存为成员变量并将它们重新分配给新的 List,但这会使代码聚集在一起,并且需要在 setter 方法中进行一些硬编码(因为在 ObservableList 中没有 #getListeners 方法) . [编辑:实际上我不能这样做,因为监听器是由另一个我不能/不想从这个类访问的类添加的。]
如何设置新的 List 来保留 Listeners 而不复制每个元素?
我使用的是最新版本的 Java。
【问题讨论】: