Ниже приведен простой фрагмент кода JavaFX, чтобы проиллюстрировать мой вопрос.
List list1 = new ArrayList();
list1.add("foo");
...
someListView = new ListView<>();
ObservableList someObservableList = FXCollections.observableList(list1);
someListView.setItems(someObservableList);
...
someObservableList.add("bar");
Если я правильно понял, после вызова метода setItems
не только содержимое списка будет отображаться в компоненте ListView
Gui, но также после добавления элементов в экземпляр ObservableList
, ListView
будет автоматически обновляться и автоматически отображать вновь добавленные элементы без необходимости вызова каких-либо дополнительных методов add
или refresh
.
До сих пор так хорошо. Но что, если я добавлю что-то в исходный список (т.е. list1
). Эти изменения не распространяются автоматически. Это имеет смысл, но иногда это неудобно.
Конечно, в классическом Java-приложении модель приложения не состоит из экземпляра ObservableCollection
. Поэтому всякий раз, когда вы добавляете что-то в модель, вам всегда придется обновлять экземпляры ObservableLists
, которые были получены из исходного списка. Видимо, это неизбежно, верно?
Это заставило меня задуматься: разумно ли модифицировать типы типов Collection
(например, List
, Collection
, Set
, Iterable
,...) в классах модели и заменить их на их альтернативы ObservableCollection
с этого момента?
До сих пор я всегда полагал, что эти классы ObservableCollection
должны были использоваться только в слое Gui приложения, но, кажется, довольно удобно использовать их везде.