ReadOnlyLongWrapper无法转换为ObservableValue <cap#1>,其中CAP#1是一个新的类型变量</cap#1>

时间:2015-04-13 00:39:32

标签: java android javafx

我创建了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。

1 个答案:

答案 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;
}