2011-12-02 181 views

回答

3

(我假設你在談論自己的類的設計,而不是如何使用其他已經設計類。)

也不總是「好,」這取決於對象的性質和(在一定程度上)你喜歡的風格。

如果一個對象不能有一個有意義的狀態沒有一些外部信息,則需要在構造函數中的信息是有道理的,因爲你不能以無效狀態創建實例。

但是,讓構造函數儘可能少地提供信息對於使類在各種情況下易於使用都是很有用的。如果這個類是一個零參數構造函數是可行的,並且不會使類複雜化,那麼在支持各種使用情況方面,包括實例被構建爲解析某個其他結構(JSON, XML等)。

1

在對象的時間取決於你是否知道值施工。

如果是,那麼使用構造函數版本,如果沒有,那麼你將不得不使用其他版本。

Ofcourse,初始化通過構造函數的版本速度更快,因爲它涉及到只有一個函數調用了3組函數調用,也更合乎邏輯的方式。

+0

所以,如果我把所有的價值它能夠更好地去使用參數版本的構造... –

+0

@Vincent我想說這個問題的答案取決於參數的參數變化的可能組合的數量。 –

+1

@Vincent:是的,如果所有的值在構造對象時已知,使用param版本。這是最好的方法。 –

0

這一切都取決於應用程序。

調用參數的構造將是一個好主意,如果在編譯的時候,你知道什麼值必須考慮到你的變量,而不是調用setter方法。因爲你正在調用3個setter方法並且在參數化構造函數中,所以你只是自己傳遞給了cnostructor。

但是,如果在編譯的時候你不知道什麼值,給予那麼你怎麼能叫paramterized構造。

但是對於初始化,它將更好地調用參數化的構造函數。

2

有也是建立在使用fluent interfaces

MyObject obj = new MyObject().setValue1("1").setValue("2").setValue("3"); 

我個人很喜歡這種方法,但第三個選項,如果參數的數量不足和在施工時已知和變化的可能組合參數很短,那麼我會參照構造函數的參數路由。我認爲大多數人會同意,12個構造函數重載是一個眼睛疼痛。

+0

可讀性很重要。在所有條件都相同的情況下,我更喜歡像上面描述的那樣更具可讀性的方法,而不是具有未知參數的構造函數。 –

+0

@GustavBertram我應該澄清。對象需要的基於狀態的數據可能最適合作爲構造函數參數。向對象添加附加內容是使用此方法IMO的好時機。 –

0

存在語義差異。如果(1)您正在初始化具有初始狀態的對象。在(2)中,您正在更改現有實例的狀態(3次)。這是一個小的差異,但可能在更復雜的系統中變得非常重要(特別是如果您依賴各種JavaBean約定)。但是,沒有人錯或者更好。

1

在構造函數中調用它總是更好的性能如果您已經知道了值。

+1

***沒有。***即使知道這些值,使用參數化構造函數並不總是更好。 –

+0

@HarryJoy:我認爲它不會好,如果參數化的構造函數正在初始化除字符串n stuff.is它之外的其他對象? –

+0

@Vincent哪種類型的其他東西?我並不是說它不好。您可以/應該使用它,但只能使用特定參數類型的一些有限參數。總之,它不應該導致內存不足或高內存操作。 –

1

然後有我的首選替代方案。事情是一些界面的名稱。它創建一個匿名類。

Thing createThing (final int val1 , final int val2 , final int val3) 
{ 
     return new Thing () 
     { 
       // can use val1, val2, val3 
     } ; 
}