我在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,请告诉我。
感谢。
答案 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)
按照以下方式组织使用大括号的儿童是否通常有效地发声?
我认为这适用于您的情况(您将重用变量名称,单独的组件等)。
在编译时,大括号会完全被优化掉吗?
是的,这只是定义范围的语言语法。