在JavaFX中为父组织使用大括号

在JavaFX中为父组织使用大括号,java,javafx,curly-braces,Java,Javafx,Curly Braces,我正在用JavaFX编写一个用户界面,我不想使用FXML。按照常规和有效的方式组织孩子们使用牙套,如下所示?大括号除了使代码看起来更好之外没有其他用途。大括号在编译时会被完全优化吗 HBox top = new HBox(); { Label white = new Label("White"); white.getStyleClass().addAll("white-check"); white.setMinWidth(160); white.setMinHei

我正在用JavaFX编写一个用户界面,我不想使用FXML。按照常规和有效的方式组织孩子们使用牙套,如下所示?大括号除了使代码看起来更好之外没有其他用途。大括号在编译时会被完全优化吗

HBox top = new HBox();
{
    Label white = new Label("White");
    white.getStyleClass().addAll("white-check");
    white.setMinWidth(160);
    white.setMinHeight(60);

    Label lightGray = new Label("Light Gray");
    lightGray.getStyleClass().addAll("lightgray-check");
    lightGray.setMinWidth(160);
    lightGray.setMinHeight(60);

    top.getChildren().addAll(white, lightGray);
}
让我知道我是否应该将此迁移到SE

谢谢

按照常规和有效的方式组织孩子们使用牙套,如下所示

我认为这在您的情况下是合适的(您将重用变量名、单独的组件等)

大括号在编译时会被完全优化吗

是的,这只是定义作用域的语言语法

按照常规和有效的方式组织孩子们使用牙套,如下所示

我认为这在您的情况下是合适的(您将重用变量名、单独的组件等)

大括号在编译时会被完全优化吗

是的,这只是定义作用域的语言语法

答案

从技术角度看,我认为你的建议是可以的

意见

从风格的角度来看,在不需要大括号的情况下增加大括号对我来说有点奇怪,因为我从未见过有人编写这样的代码。但是,它确实读OK,没有真正的技术开销,当您考虑下面的一些替代方案时,它不需要像DSL或附加语法和类型构造之类的根本不同的方法,例如创建附加方法或类。 我见过的更标准的方法是通过工厂方法或继承。例如:

备选方案

建设者

如果建设者仍然存在,那么自然的做法是使用它们——然而建设者现在已经不受欢迎,因此它们不是一个可行的替代方案。当JavaFX团队放弃构建器时,有很多替代方案(你可以在上面的所有帖子中找到),但我认为没有真正找到标准的替代方案,只是不同的选择

工厂法

继承权

替代域特定语言

e、 g.代码:

答复

从技术角度看,我认为你的建议是可以的

意见

从风格的角度来看,在不需要大括号的情况下增加大括号对我来说有点奇怪,因为我从未见过有人编写这样的代码。但是,它确实读OK,没有真正的技术开销,当您考虑下面的一些替代方案时,它不需要像DSL或附加语法和类型构造之类的根本不同的方法,例如创建附加方法或类。 我见过的更标准的方法是通过工厂方法或继承。例如:

备选方案

建设者

如果建设者仍然存在,那么自然的做法是使用它们——然而建设者现在已经不受欢迎,因此它们不是一个可行的替代方案。当JavaFX团队放弃构建器时,有很多替代方案(你可以在上面的所有帖子中找到),但我认为没有真正找到标准的替代方案,只是不同的选择

工厂法

继承权

替代域特定语言

e、 g.代码:


有趣的语法。如果我这样做,我可能更愿意考虑类加载器需要的开销吗?我的UI只有几千行。是的,我认为双括号初始化是一种反模式,不推荐使用它。您提出的解决方案比双括号初始化有更少的缺点。有趣的语法。如果我这样做,我可能更愿意考虑类加载器需要的开销吗?我的UI只有几千行。是的,我认为双括号初始化是一种反模式,不推荐使用它。您提出的解决方案比双大括号初始化有更少的缺点。
HBox top = new HBox(
    createLabel("White", "white-check"),
    createLabel("Light Gray", "lightgray-check")
);
. . . 
public Label createLabel(String text, String styleClass) {
    Label label = new Label(text);
    label.getStyleClass().add(styleClass);
    label.setMinWidth(160);
    label.setMinHeight(60);

    return label
}
HBox top = new HBox(
    new CustomLabel("White", "white-check"),
    new CustomLabel("Light Gray", "lightgray-check")
);
. . . 
public class CustomLabel extends Label {
    public CustomLabel(String text, String styleClass) {
        super(text);
        getStyleClass().add(styleClass);
        setMinWidth(160);
        setMinHeight(60);
     }
}
var top = new HBox {
  content = Seq(
    new Label {
      text = "White"
      styleClass = Seq("white-check")
      minWidth = 160
      minHeight = 60
    },
    new Label {
      text = "Light Gray"
      styleClass = Seq("lightgray-check")
      minWidth = 160
      minHeight = 60
    }
  )
}