我创建了JavaFX应用程序。我创建了用户可以在TableView中设置列的界面。这对我来说很好用。我今天尝试使用javafxports for android编译它。在编译我得到错误
ReadOnlyLongWrapper cannot be converted to ObservableValue<CAP#1> where CAP#1 is a fresh type-variable
在线
id.setCellValueFactory(e -> new ReadOnlyLongWrapper(((ProductPS) e.getValue()).getId()));
我的覆盖界面的完整代码
@Override
public <T> List<TableColumn<T, ?>> setColums() {
List<TableColumn<T, ?>> columns = new ArrayList<>();
TableColumn<T, ?> id = new TableColumn<>();
id.setText("id");
id.setEditable(true);
id.setSortable(true);
id.setResizable(true);
id.setCellValueFactory(e -> new ReadOnlyLongWrapper(((ProductPS) e.getValue()).getId()));
TableColumn<T, ?> name = new TableColumn<>();
name.setText("name");
name.setEditable(true);
name.setSortable(true);
name.setResizable(true);
name.setCellValueFactory(e -> new ReadOnlyStringWrapper(((ProductPS) e.getValue()).getLang().get(0).getName()));
columns.add(id);
columns.add(name);
return columns;
}
现在有人为什么在Android上出现问题呢?这可以改变代码并编译成android吗?我的课程没有SimpleProperty。
答案 0 :(得分:0)
在您的情况下使用泛型不是必需的。您的T
始终会投放到ProductPS
并且TableColumn
的值已知。这应该可以解决问题:
@Override
public List<TableColumn<ProductPS, ?>> setColumns() {
List<TableColumn<ProductPS, ?>> columns = new ArrayList<>();
TableColumn<ProductPS, Long> id = new TableColumn<>();
id.setText("id");
id.setEditable(true);
id.setSortable(true);
id.setResizable(true);
id.setCellValueFactory(e -> new ReadOnlyLongWrapper(e.getValue().getId()));
TableColumn<ProductPS, String> name = new TableColumn<>();
name.setText("name");
name.setEditable(true);
name.setSortable(true);
name.setResizable(true);
name.setCellValueFactory(e -> new ReadOnlyStringWrapper(e.getValue().getLang().get(0).getName()));
columns.add(id);
columns.add(name);
return columns;
}