小编Bri*_*ski的帖子

使用Java Lambdas替换javafx构建器

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

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

所以现在我可以像这样替换我的建造者

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

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

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

java lambda javafx java-8 javafx-8

5
推荐指数
1
解决办法
1490
查看次数

标签 统计

java ×1

java-8 ×1

javafx ×1

javafx-8 ×1

lambda ×1