2014-03-28 16 views
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] 

所以,我應該如何設計我的代碼,這樣,當一個實例化會拋出一個異常,仍嘗試實例化其餘的對象?

+0

老實說,最簡單的方法是簡單地把每一個單獨的嘗試... catch塊。除此之外,你必須找到一種方法來以某種方式參數化你的結構,這樣你就可以循環一些東西。你爲什麼不檢查[「Builder Pattern」](http://en.wikipedia.org/wiki/Builder_pattern)?然後,您可以創建一個構建器數組(使用您的硬編碼值),永遠不會拋出異常,然後遍歷這些構建器以實例化實際對象。無論如何,這似乎是一個很好的例子,因爲你的構造函數開始佔用很多參數。 –

+0

將每個作業包裝在單個try/catch中。它不會很漂亮,但在重構構造函數不會拋出異常之前,你的代碼不會變得更漂亮。 – Asaph

+0

(有趣的是,維基百科的文章實際上也使用車輛作爲例子。但是,請參閱頂級投票答案[here](http://stackoverflow.com/questions/328496/when-would-you-use-the-builder模式)爲一個很好的例子;比維基百科海事組織好得多。) –

回答

1

我認爲正確的解決方案是使用單獨的try ... catch塊,但只是爲了挑戰,這(Java 8)代碼可以做任何你想要的東西:

Callable[] initializers = { 
    // 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")) 
}; 

for (Callable i : initializers) { 
    try { 
     i.call(); 
    } catch (Exception ex) { 
     System.out.println(e.getMessage()); 
    } 
} 
+0

+1嘿,這很酷。 –