【发布时间】:2017-04-06 10:29:47
【问题描述】:
我有两种扩展类 X 的类
public class A extends X
和
public class B extends X
在我的 JavaFX 应用程序中,需要有一个组合框。此组合框是使用类 A 或 B 构造的,并使用该类的相应 toString() 方法进行填充。减少代码重复。
我正在尝试修改当前生成组合框的方法,以便允许 A 或 B 类型的 ObservableList。
protected ComboBox<? extends X> getComboBox(ObservableList<? extends X> list){
ComboBox<? extends X> comboBox = new ComboBox<>();
comboBox.setItems(list);
comboBox.setCellFactory(new Callback<ListView<? extends X>, ListCell<? extends X>>() {
@Override
public ListCell<Controller> call(ListView<Controller> param) {
return new ListCell<? extends X>(){
@Override
public void updateItem(Class<? extends X> content, boolean empty){
super.updateItem(content, empty);
if(!empty) {
setText(content.toString());
} else {
setText(null);
}
}
};
}
});
return comboBox;
}
由于两个类都有一个超类,是否有可能实现这样的事情(并且可能但不是本质上,将其作为原始类类型返回)
@SillyFly - 我使用 Reflections 依赖项检索列表。它返回特定类型(即 A)的所有类
public ObservableList<A> getAList() {
Reflections reflection = new Reflections("com.classes.aClasses");
ObservableList<A> classesList = FXCollections.observableArrayList();
for (Class<? extends A> thisClass : reflection.getSubTypesOf(A.class)) {
try {
classesList.add(thisClass.newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
return classesList;
}
【问题讨论】:
-
什么是
Input?这是基类(您之前称为X)吗? -
更正了这个@sillyfly
标签: java inheritance javafx combobox superclass