我正在尝试创建一个 TreeTableView
并尝试将销售值(value)工厂设置为
@FXML
private TreeTableColumn<Good, Long> folderId;
这里:
folderId.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, Long> param) ->
new ReadOnlyLongWrapper(param.getValue().getValue().getFolderId()));
我得到了带有红色下划线的标题中描述的错误。 getFolderId
在Good
类如下:
public Long getFolderId() {
return folderId;
}
相同的方法适用于字符串或 boolean 值,但会在编译时丢弃标题中提到的异常和以下内容:
incompatible types: bad return type in lambda expression
javafx.beans.property.ReadOnlyLongWrapper cannot be converted to javafx.beans.value.ObservableValue<java.lang.Long>
如何获取ObservableValue<java.lang.Long>
而不是ReadOnlyLongWrapper
为什么这个异常只出现在 Long 值中?
这是整个方法:
goodsPane.setCenter(goodTreeTableView);
List<Good> goodAndFoldersList = goodsService.getGoods();
List<Good> goods = new ArrayList<Good>();
List<Good> roots = new ArrayList<Good>();
for (Good good: goodAndFoldersList){
if (good.isIs_folder()) {
roots.add(good);
}else {
goods.add(good);
}
}
TreeItem<Good> rootItem = new TreeItem<>();
for (Good root: roots){
Long folderId = root.getId();
TreeItem<Good> rootTreeItem = new TreeItem<>(root);
for (Good good: goods){
if (good.getFolderId() == folderId){
TreeItem<Good> goodTreeItem = new TreeItem<>(good);
rootTreeItem.getChildren().add(goodTreeItem);
}
}
rootItem.getChildren().add(rootTreeItem);
}
goodTreeTableView.setRoot(rootItem);
goodName.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, String> param) ->
new ReadOnlyStringWrapper(param.getValue().getValue().getName()));
folderId.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, Long> param) ->
new ReadOnlyLongWrapper(param.getValue().getValue().getFolderId()));
is_folder.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, Boolean> param) ->
new ReadOnlyBooleanWrapper(param.getValue().getValue().isIs_folder()));
最佳答案
ReadOnlyLongWrapper
是 ObservableValue<Number>
.
因此有两种解决方案:
- 将您的列更改为
TreeTableColumn<Good, Number> folderId;
或 - 创建您自己的
ObservableValue<Long>
的实现.
在大多数情况下,1 应该就可以了,就像你可以做的 Number.longValue()
.
关于java - lambda 表达式中的返回类型 ReadOnlyLongWrapper 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30172613/