2013-05-17 181 views
1

爲什麼一些示例類在Swing Tutorials(抱歉,我不記得哪一個,我可能是錯的,但我知道我看到這個地方)使用私有的方法是這樣?:Java - 私有初始化程序或在構造函數中的初始化?

public MyClass{ 
    public MyClass(){ 
     . 
     . 
     . 
     initializeComponents(); 
     . 
     . 
     . 
    } 
    private void initializeComponents(){ 
     //initializing 
    } 
} 

這是正確的約定,還是這樣?:

public MyClass{ 
    public MyClass(){ 
     . 
     . 
     . 
     //initializing components 
      //component initialization 
     . 
     . 
     . 
    } 
} 

哪種樣式的初始化更好?

我只看到了有大量組件初始化使用私有方法的示例類,所以它看起來像是爲了可讀性。我對嗎?如果是這樣,不會使用評論也提供了類似的可讀性水平?

+0

哦,人...四個答案,幾乎相同的內容,但都是獨一無二的。哪個答案是被標記爲已接受的答案? – Justin

回答

2

所以它似乎是爲了可讀性。我對嗎?

是的,它是更好的可讀性,以及保持所有組件初始化在一個方法中,類似的方法是用於.Net框架中的WinForm。如果只使用註釋,那麼想象你的構造函數只用於組件初始化的200行代碼。

如果是這樣,就不會使用註釋還提供了類似級別的 可讀性?

組件初始化不僅僅是構造函數調用組件類,它通常包括設置其他屬性,如高度,寬度,位置等。如果使用註釋和空白現在想象一下,然後構造將是數百隻是因爲組件的初始化。

+0

構造函數是「數百行代碼」這麼糟糕嗎? – Justin

+0

@gangqinlaohu,它總是更好的任何方法儘可能少線路。它很適合維護。構造函數也是一種方法,所以是有數百行代碼是不好的,直到你現在甚至不能進入鏡像的位置。由於您可以將初始化部分解壓到單獨的方法中,因此它更易於維護並提供更好的可讀性。 – Habib

+0

好的(我還沒有進入那個位置)。 – Justin

1

我認爲他們這樣做是爲了可讀性。從構造函數中分離GUI組件的初始化會使構造函數代碼更加清晰和簡潔(否則,您將擁有巨大的構造函數方法)。因此,您確切知道哪些代碼塊與GUI相關,哪些與該類的內部功能相關。

+0

爲什麼他們不能使用評論和空白? – Justin

1

當然,第一個更好。它的所有更好的可讀性和maintanaibility。

第二種方法並不好,因爲在大多數情況下,評論實際上很糟糕且不可靠。如果某些邏輯被改變,評論通常不會更新。如果代碼本身很好,包括自解釋名稱的方法,它總是更好。提取一些邏輯上與單個責任相關的代碼作爲抽象步驟(您不需要深入瞭解細節)

+0

評論和空白有什麼不好? – Justin

+0

這很有道理。 – Justin

1

如果您需要初始化許多字段,並且也有不同的類型。那麼只有它能夠更好地投入到功能,從constrctor調用它,就像 -

public MyClass{ 
    public MyClass(){ 
     initializeComponentType1(); 
     initializeComponentType2(); 
     ... 
    } 
    /** 
    * initializing type 1 component 
    */ 
    private void initializeComponentType1(){ 
     //initializing 
    } 
    /** 
    * initializing type 2 component 
    */ 
    private void initializeComponentType2(){ 
     //initializing 
    } 
} 

它提高可讀性和代碼可維護性。總是建議編寫簡單,可讀和可維護的代碼。

但是,如果有一組啓動,你不需要創建函數。