DataConstantsNames
中我有:
public static final ObservableList<Object> IMPORTVARIABLES = FXCollections.observableArrayList(DATE, TIME, new Separator(),OPEN, HIGH, LOW, CLOSE, new Separator(),VOLUME);
我想将这些变量添加到类控制器中的choiceBox,其中我有7个选择框:
ChoiceBox[] columnName = {choiceboxColumn1, choiceboxColumn2, choiceboxColumn3, choiceboxColumn4, choiceboxColumn5, choiceboxColumn6, choiceboxColumn7};
我的问题:如果我执行for循环,例如:
for (int i = 0; i < columnName.length; i++) {
columnName[i].setItems(DataConstantsName.IMPORTVARIABLES);
}
一切都很好,但如果我尝试将项目设置为单个choiceBox,我会收到此错误:
我哪里错了?
答案 0 :(得分:2)
我不知道为什么SB使用通配符(<?>
)生成你的ChoiceBox,但你不能在没有类型规范的通配列表中设置项目。
有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html。
要使代码可编辑,请从ChoiceBoxes中删除通配符:
@FXML private ChoiceBox choiceboxColumn1;
或将变量转换为特定类型:
((ChoiceBox)choiceboxColumn1).setItems(IMPORTVARIABLES);
或
((ChoiceBox<Object>)choiceboxColumn1).setItems(IMPORTVARIABLES);
P.S。: for
循环适合您,因为您将choiceboxColumn1
放入普通ChoiceBox
数组中。通过这个你告诉编译器忽略所有泛型并使用旧的java 1.4样式中的变量。
您可以使用直接设置来实现:
ChoiceBox cb = choiceboxColumn1;
cb.setItems(IMPORTVARIABLES);
由于Java类型擦除概念,您可以这样做:http://docs.oracle.com/javase/tutorial/java/generics/erasure.html