JavaFX преобразует табличное представление вопросительного знака в известный тип - PullRequest
1 голос
/ 21 октября 2019

У меня проблемы с вставкой элементов в мой TableView.

Я получил ссылку на табличное представление, переведя ее из Node. Проблема в том, что я получаю сообщение об ошибке при вставке элементов в таблицу.

The method add(capture#2-of ?) in the type List<capture#2-of ?> is not applicable for the arguments

TableView<?> table = (TableView<?>)mainPane.getChildren().stream().filter(c -> c instanceof TableView<?>).findFirst().get();

ControlTimePickerController ctpc = new ControlTimePickerController();

if (ctpc.exitedWithButton()) {
    ControlSchedule cSch = ctpc.getSelectedControlSchedule();

    //I'M GETTING THE ERROR HERE
    table.getItems().add(cSch);
}

1 Ответ

0 голосов
/ 21 октября 2019

Вам необходимо использовать другой параметр типа, указывающий, что ControlSchedule действительно является типом, который можно добавить в список items или использовать необработанный тип. Последний подход имеет эффект, аналогичный использованию TableView<Object> в этом случае. Однако использование необработанного типа не рекомендуется;в этом случае вы уже выбросили тип безопасности из окна.

Здесь я бы рекомендовал использовать

TableView<? super ControlSchedule> table = (TableView<? super ControlSchedule>)mainPane.getChildren().stream().filter(c -> c instanceof TableView<?>).findFirst().get();

Но вы должны быть на 100% уверены, что этот бросок выиграл. ничего не сломать. Существует множество объектов, используемых для установки TableView, что может привести к исключению, если тип TableView на самом деле не соответствует параметру типа, используемому в объявлении переменной table выше.

Я не рекомендую использовать этот вид кода в любом случае. Лучшей альтернативой было бы использование подходящей структуры данных для хранения TableView. Это позволит вам избежать такого рода приведения, позволяя компилятору выполнять проверки.

...