【发布时间】: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
-
你的意思是'匿名'?