我可以捕獲java.lang.Exception而不是它的子類嗎?我可以捕獲java.lang.Exception而不是其具體的子類嗎?
考慮這個塞納里奧:
public class Tree {
public static Tree newInstance() throws NoWaterException, NoSoilException, NoSunshineException {
...
return new Tree();
}
}
當我想樹一個例子,我可以這樣做:
public Tree plantTree() throws TreePlantExcetpion {
try {
...
return Tree.newInstance();
} catch (NoWaterException e) {
throw new TreePlantExcetpion("Cannot plant a tree since no water", e);
} catch (NoSoilException e) {
throw new TreePlantExcetpion("Cannot plant a tree since no soil", e);
} catch (NoSunshineException e) {
throw new TreePlantExcetpion("Cannot plant a tree since no sunshine", e);
}
}
但我也能做到這一點也可以使用:
public Tree plantTree() throws TreePlantExcetpion {
try {
...
return Tree.newInstance();
} catch (Exception e) {
throw new TreePlantExcetpion("Cannot plant a tree", e);
}
}
我更喜歡方法plantTree
()的第二次執行,因爲它更短且清晰r,在這種方法中,我不關心Exception
的具體子類,我需要做的是將它包裝在新的TreePlantExcetpion
中並傳遞給它。所有的詳細信息都不會丟失。我確信Tree.newInstance()方法不會拋出任何其他類型的異常(至少現在)。我可以這樣做嗎?
注意:NoWaterException
,NoSoilException
,NoSunshineException
不能成爲TreePlantExcetpion
子類。它們不在同一個繼承層次結構中。
問題是,如果異常處理對於所有捕獲到的異常都是相同的,那麼我可以只抓住他們的超類,即java.lang.Exception
而不是?
如果這些類不在繼承層次結構中,該怎麼辦? – chance 2011-02-08 12:41:52