gpt4 book ai didi

java - 使用 Java Lambdas 替换 javafx 构建器

转载 作者:搜寻专家 更新时间:2023-10-31 20:19:47 26 4
gpt4 key购买 nike

我是 Javafx 2 构建器表示法的忠实粉丝,但它已在 Java 8 中弃用,我需要在大型代码库中替换我的旧代码。我想保持类似的编程风格。现在我可以使用双括号初始化,但我不喜欢创建这么多匿名内部类,我发现它有时会导致某些类出现问题。我认为必须有一种方法可以使用 lambda 来完成类似的事情并想出了这个。

public class FXUtil {
public static <T> T build(T node, Consumer<T> initializer) {
initializer.accept(node);
return node;
}
}

所以现在我可以像这样替换我的构建器

Label label = FXUtil.build(new Label(), label -> {
label.setText("Text");
label.setStyle("-fx-font-size: 20");
label.setMinWidth(100);
});

这不如构建器或双括号语法好,但总比没有好。我的问题是这是否有任何类似于双括号初始化的缺点?对象本身不是匿名类,但我是否通过为 lambda 创建匿名类来做同样的事情? lambda 应该被垃圾收集,对吗?既然 permgen 空间在 JDK8 中消失了,我还需要担心这个吗?除了使用 FXML 之外,还有其他人有更好的初始化 javafx 类的方法吗?

编辑:根据@BenjaminGale 的建议更新示例

最佳答案

我假设您提到的双括号初始化的缺点是,作为内部类,它捕获对创建它的封闭类的引用。 lambda 不会那样做。 (而且,在 Oracle Hotspot JVM 上,它也不会编译为匿名内部类。)

关于java - 使用 Java Lambdas 替换 javafx 构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25942999/

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