2011-03-09 47 views
8

我需要創建某種類型的對象。 該對象的類只有一個構造函數(我寫的一個)。我們可以停止構造函數的運行嗎?

我的程序接收創建具有參數ID的對象實例的請求。 如果ID參數包含不是數字的字符,我想停止構造函數。

我無法檢查參數,因爲我不是調用構造函數的人。

回答

4

如何解決這個問題取決於當給出非法字符時你想要發生什麼,這又取決於我們在談論什麼對象以及消費庫如何使用它。

最合理的做法是拋出IllegalArgumentException,這是我建議你做的。儘管我強烈建議不要這樣做(你不能直接在構造函數中這樣做,但是可以創建一個工廠方法來實現這一點),但它也可能是合理的,即使我強烈建議不要這樣做(

)。

+6

'return null'? – biziclop 2011-03-09 18:58:41

+0

這就是:讓我說我有兩個班。從Contact類派生的類VIPcontact。 VIPconnetact類的構造函數調用Contact構造函數。它(Contact構造函數)檢查參數是否有效。 – SapG 2011-03-09 19:04:49

+1

我不能「返回null」導致構造器的返回類型是void。 – Loda 2012-01-18 13:46:11

6

「停止」構造函數的唯一方法是拋出異常。當然要記住,調用者應該「知道」這個異常,並且能夠處理構造函數失敗的情況。

從構造函數拋出異常不停止對象被創建,雖然,它只是使其引用變量的賦值失敗,並參考unavaliable(因此符合垃圾收集)除非你做將this從構造函數本身傳遞給外部方法的錯誤。 (你不應該這樣做)

19

使構造函數爲私有並公開一個靜態工廠方法,如果參數有效,它將驗證並返回對象的新實例。

+1

+1如果您也可以更改調用者代碼,這確實是理想的解決方案。 – biziclop 2011-03-09 18:59:57

相關問題