2015-03-02 36 views
1

我正在用JavaFX編寫用戶界面,並且不希望使用FXML。按照以下方法組織使用大括號的兒童是否具有傳統和高效的聲音?除了使代碼看起來更好以外,大括號不會成爲其他用途。編譯時,大括號是否會完全優化?在JavaFX中爲父母組織使用大括號

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

有趣的語法。可能更喜歡[雙大括號初始化](http://stackoverflow.com/a/27521360/1155209)。 – jewelsea 2015-03-03 01:21:08

+0

@jewelsea如果我這樣做了,我是否需要關心類加載器需要的開銷?我的用戶界面有幾千行。 – guyfleeman 2015-03-03 02:56:30

+0

是的,我認爲雙大括號初始化是一種反模式,不推薦使用它。你提出的解決方案比雙重大括號初始化有更少的缺點。 – jewelsea 2015-03-03 05:07:51

回答

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

替代領域特定語言

例如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 
    } 
) 
} 
1

是否按照以下方法組織使用大括號的兒童時,傳統上和有效率地發聲?

我認爲這是適合您的情況(您將重用變量名稱,單獨的組件等)。

在編譯時,大括號是否會被完全優化掉?

是的,這只是定義範圍的語言語法。

+0

非常感謝:) – guyfleeman 2015-03-03 00:51:19