2

在课堂上DataConstantsNames我有:

public static final ObservableList<Object> IMPORTVARIABLES = FXCollections.observableArrayList(DATE, TIME, new Separator(),OPEN, HIGH, LOW, CLOSE, new Separator(),VOLUME);

我想将这些变量添加到类控制器中的一个选择框,我有 7 个选择框:

ChoiceBox[] columnName = {choiceboxColumn1, choiceboxColumn2, choiceboxColumn3, choiceboxColumn4, choiceboxColumn5, choiceboxColumn6, choiceboxColumn7};

我的问题:如果我做一个 for 循环,例如:

for (int i = 0; i < columnName.length; i++) {
    columnName[i].setItems(DataConstantsName.IMPORTVARIABLES);
}

一切都很好,但是如果我尝试将项目设置为单个选择框,我会收到此错误:

在此处输入图像描述

我哪里错了?

4

1 回答 1

3

我不知道为什么 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);

PS: for循环对您有用,因为您放入choiceboxColumn1了 plain 数组ChoiceBox。通过这个你告诉编译器忽略所有泛型并使用旧的 java 1.4 风格的变量。

您可以使用直接设置来实现:

ChoiceBox cb = choiceboxColumn1;
cb.setItems(IMPORTVARIABLES);

由于 Java 类型擦除概念,您可以这样做:http: //docs.oracle.com/javase/tutorial/java/generics/erasure.html

于 2013-06-17T14:21:03.750 回答