我是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的建议