【发布时间】:2018-01-27 20:07:39
【问题描述】:
我想知道为什么TableView<T> 方法setItems 不以ObservableList<? extends T> 作为参数,而是ObservableList<T>?
还有什么是将ObservableList<? extends T> 转换为ObservableList<T> 的最佳方法。我可以将第一个列表中的所有元素添加到第二个列表中,然后添加侦听器以收听更改,但我想知道也许有更好的方法。
【问题讨论】:
-
你的问题不是很清楚。您应该发布代码。
-
它会阻止您通过
table.getItems().add(...)将项目添加到表中(您需要什么参数类型?)。因此,这将迫使程序员必须保留对列表的单独引用。这在某些情况下会很不方便。有什么好处? -
也许如果您想将表的后备列表更改为不同类型的列表,最好完全替换表,即使类型相关。
-
你可以尝试使用继承=>
ObjA,ObjB extends ObjA。创建TableView<ObjA>,然后创建ObservableList<ObsA> list并将ObjA和ObjA对象添加到此列表中。 =>table.getItems().add(list). -
如果您确定永远不会使用
TableView.getItems()返回的列表写入到列表中(可能会导致在James_D 写的列表)最有效的方法是将您的ObservableList<? extends T>简单地转换为原始类型。但是,如果您想使用ObservableList<E>其中E extends T和TableView,为什么不简单地使用TableView<E>???
标签: java list generics javafx tableview