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