【问题标题】:How transform anonymous java class to lambda expression?如何将匿名 java 类转换为 lambda 表达式?
【发布时间】:2015-01-03 21:34:50
【问题描述】:

我有一个关于 JavaFX 的应用程序。在这个应用程序中,我需要实现列的编辑器。在旧版本的代码中完美运行:

myColumn.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<MyRowDataObject, String>>() {
                    @Override
                    public void handle(TableColumn.CellEditEvent<MyRowDataObject, String> t) {
                        ((MyRowDataObject) t.getTableView().getItems().get(
                                t.getTablePosition().getRow())
                        ).setFirstName(t.getNewValue());
                    }
                }
);

但是当我尝试使用 lambda 重写代码时

myColumn.setOnEditCommit((TableColumn.CellEditEvent event) ->
                ((MyRowDataObject) event.getTableView().getItems().get(event.getTablePosition().getRow())).setEmail(event.getNewValue().toString())
);

我收到一个错误:错误:java:不兼容的类型:lambda 表达式中的参数类型不兼容 告诉我如何指定 lambda 表达式的类型?

【问题讨论】:

  • 您是否尝试过将完整的 generic 类型指定为 lambda 表达式的参数,而不是现在的 raw 类型?
  • 你的问题是原始类型CellEditEvent;如果您要使用清单类型,请将其设为完整的泛型类型。但是你可以完全省略类型,让编译器推断它。
  • italic bold myColumn.setOnEditCommit((TableColumn.CellEditEvent event) -> ((MyRowDataObject)event.getTableView() .getItems().get(event.getTablePosition().getRow())).setEmail(event.getNewValue().toString()) ); 不起作用 - lambda 表达式中的参数类型不兼容
  • 如果我不指定参数的类型,编译器提示错误:java: cannot find symbol symbol: method getNewValue() location: variable event of type javafx.event.Event
  • 你的意思是'匿名'

标签: java lambda java-8


【解决方案1】:

也许有人会感兴趣,转过来编译代码如下。

 myColumn.setOnEditCommit(event -> {
                final TableColumn.CellEditEvent _evn = (TableColumn.CellEditEvent) event;
                ((MyRowDataObject) _evn.getTableView().getItems().get(_evn.getTablePosition().getRow())).setEmail(_evn.getNewValue().toString());
            });

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 2013-04-24
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多