给 ListChangeListener 初始状态
Give ListChangeListener initial state
我想观察一个由完全独立的代码修改的 ObservableList。我的问题是我不仅希望在列表更改时调用我的 ListChangeListener(当我附加我的侦听器时,列表可能已经包含元素),而且我还希望将初始状态传递给侦听器。
显然我可以执行以下操作:
list.addListener(this::listenerMethod);
listenerMethod(fakeChange);
但是使用这种方法,在两个方法调用之间添加的任何项目都会被处理两次,这并不理想。
顺序颠倒时:
listenerMethod(fakeChange);
list.addListener(this::listenerMethod);
第二种方法将完全忽略在两个方法调用之间添加的任何元素。
处理这种情况的最佳方法是什么?
看来您应该关心的是知道何时首次调用您的侦听器以处理任何调用前元素。
在您的情况下,由于可能永远不会调用侦听器,因此您需要更改的是何时以及如何验证列表的初始状态。由于更改侦听器是您的实现,因此我会将列表传递给侦听器构造函数并在此时处理初始状态。如果永远不会调用侦听器,那么您就被覆盖了。
我想观察一个由完全独立的代码修改的 ObservableList。我的问题是我不仅希望在列表更改时调用我的 ListChangeListener(当我附加我的侦听器时,列表可能已经包含元素),而且我还希望将初始状态传递给侦听器。
显然我可以执行以下操作:
list.addListener(this::listenerMethod);
listenerMethod(fakeChange);
但是使用这种方法,在两个方法调用之间添加的任何项目都会被处理两次,这并不理想。
顺序颠倒时:
listenerMethod(fakeChange);
list.addListener(this::listenerMethod);
第二种方法将完全忽略在两个方法调用之间添加的任何元素。
处理这种情况的最佳方法是什么?
看来您应该关心的是知道何时首次调用您的侦听器以处理任何调用前元素。
在您的情况下,由于可能永远不会调用侦听器,因此您需要更改的是何时以及如何验证列表的初始状态。由于更改侦听器是您的实现,因此我会将列表传递给侦听器构造函数并在此时处理初始状态。如果永远不会调用侦听器,那么您就被覆盖了。