JavaFX 使用 lambda 调用方法的回调实现



我在这里找到了一段非常好的代码:博客

我想在我的应用程序中实现它。这篇博文来自 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()

在"参数"上。我将其更改为:

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>

我一直在寻找如何解决它,但不幸的是我找不到简单的答案。

您很可能使用的是原始TableColumn实例。
虽然TableColumn是一个泛型类,声明为TableColumn<S,T>其中

S - TableView

泛型类型的第 S 类型(即 S == TableView(

T - 此表列中所有单元格中的内容类型。

所以当你写:

col.setCellValueFactory(
(param->new SimpleStringProperty(param.getValue().get(j).toString())));

编译器将param视为使用Object类声明的变量,Object当然没有getValue()方法。
而编译错误:

无法解析方法 getValue((

声明一个参数化/泛型TableColumn实例,它应该可以解决你的问题。

最新更新