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


在“参数”上。我已将其更改为:

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泛型类型的Th类型(即S == TableView)
  
  T-此TableColumn中所有单元格中内容的类型。


所以当你写:

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


param被编译器认为是用Object类声明的变量,并且Object当然没有getValue()方法。
而编译错误:


  无法解析方法getValue()


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

关于java - 带有lambda的call方法的JavaFX Callback实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45145431/

10-11 00:54