2

私が持っているクラスDataConstantsNamesで:

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

これらの変数を、7 つの ChoiceBox があるクラス コントローラーの ChoiceBox に追加したいと思います。

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

私の質問: 次のような for ループを実行すると:

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

すべて問題ありませんが、項目を 1 つの ChoiceBox に設定しようとすると、次のエラーが発生します。

ここに画像の説明を入力

どこが間違っていますか?

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入れたので、ループはうまくいきました。これにより、すべてのジェネリックを無視し、古いJava 1.4スタイルの変数を操作するようコンパイラーに指示しました。choiceboxColumn1ChoiceBox

直接セットを使用してそれを達成することができます:

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

Java型消去の概念により、それを行うことができます: http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

于 2013-06-17T14:21:03.750 に答える