回答
我覺得你的建議是從技術的角度確定。
意見
從文體的角度來看,當真正需要沒有額外的括號只是有點怪我,因爲我從來沒有見過任何人編寫代碼這樣。然而,它確實沒有問題,沒有真正的技術開銷,並且當您考慮下面的一些替代方案時,它不需要像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);
}
}
替代領域特定語言
例如ScalaFX code:
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
}
)
}
有趣的語法。可能更喜歡[雙大括號初始化](http://stackoverflow.com/a/27521360/1155209)。 – jewelsea 2015-03-03 01:21:08
@jewelsea如果我這樣做了,我是否需要關心類加載器需要的開銷?我的用戶界面有幾千行。 – guyfleeman 2015-03-03 02:56:30
是的,我認爲雙大括號初始化是一種反模式,不推薦使用它。你提出的解決方案比雙重大括號初始化有更少的缺點。 – jewelsea 2015-03-03 05:07:51