我在这里找到了非常好的代码:blog
我想在我的应用程序中实现它。此博客文章发布于2014年,作者未使用过lambda。我试图自己做,以避免非常丑陋的匿名电话,但我无法弄清楚,怎么做。有原始代码:
tableColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty((param.getValue().get(j).toString()));
}
});
Intellij会自动将其转换为:
tableColumn.setCellValueFactory(param ->
new SimpleStringProperty((param.getValue().get(j).toString())));
但是有一个错误:
Cannot resolve method getValue()
on&#34; param&#34;。我已将其改为:
tableColumn.setCellValueFactory((TableColumn.CellDataFeatures<ObservableList, String> param) ->
new SimpleStringProperty((param.getValue().get(j).toString())));
由于这个原因,它无法正常工作:
Incompatible parameter types in lambda expression:
expected object but found CellDataFeatures<ObservableList, String>
我一直在四处寻找如何修复它,但不幸的是我无法找到简单的答案。
答案 0 :(得分:1)
您很可能正在使用原始TableColumn
实例
虽然TableColumn
是声明为TableColumn<S,T>
的通用类,其中
S - 类型的TableView泛型类型(即S == TableView)
T - 此TableColumn中所有单元格中的内容类型。
所以当你写:
col.setCellValueFactory(
(param->new SimpleStringProperty(param.getValue().get(j).toString())));
param
被编译器视为使用Object
类声明的变量,而Object
当然不具备getValue()
方法。
>
而编译错误:
无法解析方法getValue()
声明参数化/通用TableColumn
实例,它应该可以解决您的问题。