使用lambda

时间:2017-07-17 13:20:24

标签: java javafx lambda

我在这里找到了非常好的代码: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>

我一直在四处寻找如何修复它,但不幸的是我无法找到简单的答案。

1 个答案:

答案 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实例,它应该可以解决您的问题。