1
我有這樣的代碼,應該在每個實例化時拋出一個不同的異常。對數組中的多個項目進行單嘗試捕獲塊
Vehicle[] parkingLot = new Vehicle[5];
try
{
// NEGATIVE INPUT
parkingLot[0] = new Truck(1200.0, 2000, "Chevrolet", -8, new Person());
// NULL MANUFACTURER
parkingLot[1] = new Vehicle("", 8, new Person("John"));
// NULL OWNER NAME
parkingLot[2] = new Vehicle("Mitsubishi", 6, new Person(""));
// TOW CAPACITY OVER 1500
parkingLot[3] = new Truck(1700.0, 1000, "Nissan", 6, new Person("Joe"));
// LOAD CAPACITY OVER 8600
parkingLot[4] = new Truck(1200.0, 9000, "Nissan", 6, new Person("Frank"));
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
由於我使用的是創建這些對象是硬編碼的值,我不能使用一個循環的東西,如
parkingLot[index]
所以,我應該如何設計我的代碼,這樣,當一個實例化會拋出一個異常,仍嘗試實例化其餘的對象?
老實說,最簡單的方法是簡單地把每一個單獨的嘗試... catch塊。除此之外,你必須找到一種方法來以某種方式參數化你的結構,這樣你就可以循環一些東西。你爲什麼不檢查[「Builder Pattern」](http://en.wikipedia.org/wiki/Builder_pattern)?然後,您可以創建一個構建器數組(使用您的硬編碼值),永遠不會拋出異常,然後遍歷這些構建器以實例化實際對象。無論如何,這似乎是一個很好的例子,因爲你的構造函數開始佔用很多參數。 –
將每個作業包裝在單個try/catch中。它不會很漂亮,但在重構構造函數不會拋出異常之前,你的代碼不會變得更漂亮。 – Asaph
(有趣的是,維基百科的文章實際上也使用車輛作爲例子。但是,請參閱頂級投票答案[here](http://stackoverflow.com/questions/328496/when-would-you-use-the-builder模式)爲一個很好的例子;比維基百科海事組織好得多。) –