我正在尝试使用带有 JavaFX ListView 的接口,以允许在应用程序的不同点的列表中显示多个对象类型(不同 GUI 屏幕上的不同对象类型。我在我的 JavaFX 控制器类中将 ListView 定义为:
@FXML private static ListView<? extends ListDisplayObj> lvLeftBarItems;
并且ListDisplayObj
是一个简单的界面:
public interface ListDisplayObj
{
public String getListDisplayString();
}
我有一个数据库级方法,它根据给定的键获取要显示的对象列表 - 该方法定义为:
public ObservableList<? extends ListDisplayObj> getListObjectsForKey(String selectedKey)
{
...
}
稍后在控制器事件处理程序(或 initialize() 方法)中,我尝试使用 ObservableList 初始化 ListView,如下所示:
ObservableList<? extends ListDisplayObj> ol = MyObjectManager.getListObjectsForKey(selectedKey);
lvLeftBarItems.setItems(ol);
该lvLeftBarItems.setItems(ol)
调用会生成以下编译器错误(在 Netbeans 中):
incompatible types: ObservableList<CAP#1> cannot be converted to ObservableList<CAP#2>
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends ListDisplayObj from capture of ? extends ListDisplayObj
CAP#2 extends ListDisplayObj from capture of ? extends ListDisplayObj
有什么建议么?我不确定如何解决这个问题。我尝试过使用原始对象(实现 ListDisplayObj)而不是 的变体<? extends ListDisplayObj>
,只是返回<ListDisplayObj>
vs<? extends ListDisplayObj>
等,但没有运气。