gpt4 book ai didi

java - 回调 Lambda 表达式 + JavaFX

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:47 26 4
gpt4 key购买 nike

所以,我正在尝试更新我的一个旧 JavaFX 应用程序,它是在 Java 6 版本上创建的。我得到了一个提示,我可以转换当前代码并改用 lambda 表达式,有人可以帮我转换这段代码或以某种方式指导我吗?

// define a simple boolean cell value for the action column so that the column will only be shown for non-empty rows.
addColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<UserDetails, Boolean>, ObservableValue<Boolean>>() {
@Override public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<UserDetails, Boolean> features) {
return new SimpleBooleanProperty(features.getValue() != null);
}
});

// create a cell value factory with an add button for each row in the table.
addColumn.setCellFactory(new Callback<TableColumn<UserDetails, Boolean>, TableCell<UserDetails, Boolean>>() {
@Override public TableCell<UserDetails, Boolean> call(TableColumn<UserDetails, Boolean> personBooleanTableColumn) {
return new AddPersonCell(window, tableUser);
}
});

最佳答案

只有在接口(interface)中只有一个抽象方法时,Lambda 表达式才有效。因为这是 Callback 的情况这可以是这里的一个。

基本上,您将匿名类与 (<parameters>) -> <method body> 形式的 lambda 表达式放在一起.

在这种情况下

new Callback<TableColumn.CellDataFeatures<UserDetails, Boolean>, ObservableValue<Boolean>>() {
@Override public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<UserDetails, Boolean> features) {
return new SimpleBooleanProperty(features.getValue() != null);
}
}

成为

(TableColumn.CellDataFeatures<UserDetails, Boolean> features) -> {
return new SimpleBooleanProperty(features.getValue() != null);
}

这可以进一步简化:

  1. 如果不需要参数类型来决定要调用的方法,则可以将其删除。
  2. 如果只有一个参数没有类型,()可以删除括号。
  3. 如果方法体只包含一个语句,{};可以删除。如果语句是 return声明,return关键字也需要删除。

这允许您进一步简化 lambda 表达式

features -> new SimpleBooleanProperty(features.getValue() != null)

使用相同的方法

new Callback<TableColumn<UserDetails, Boolean>, TableCell<UserDetails, Boolean>>() {
@Override public TableCell<UserDetails, Boolean> call(TableColumn<UserDetails, Boolean> personBooleanTableColumn) {
return new AddPersonCell(window, tableUser);
}
}

可以改成

personBooleanTableColumn -> new AddPersonCell(window, tableUser)

关于java - 回调 Lambda 表达式 + JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39143888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com