在JavaFX中使用大括号用于父母组织

时间:2015-03-02 23:53:50

标签: java javafx curly-braces

我在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,请告诉我。

感谢。

2 个答案:

答案 0 :(得分:3)

答案

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

意见

从风格的角度来看,额外的括号在没有真正需要的时候对我来说有点奇怪,因为我从未见过有人写这样的代码。但是,它确实可以读取,没有真正的技术开销,并且当您考虑下面的一些替代方案时,它不需要像DSL那样根本不同的方法或其他语法和类型构造,如创建其他方法或类。

我所看到的更为标准的方法是通过工厂方法或继承。例如:

<强>替代

助洗剂

如果建筑商还在,那么自然要做的就是使用它们 - 但是建筑商现在已被弃用,所以它们不是一个可行的选择。当JavaFX团队放弃了构建器时,有许多替换提议(您可以通过builder dropping thread上的所有帖子找到),但我不认为真正的标准替换是真的发现,只是不同的选择。

工厂方法

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);
     }
}

备用域特定语言

e.g。 ScalaFX代码:

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
    }
  )
}

答案 1 :(得分:1)

  

按照以下方式组织使用大括号的儿童是否通常有效地发声?

我认为这适用于您的情况(您将重用变量名称,单独的组件等)。

  

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

是的,这只是定义范围的语言语法。