我有一個函數在執行某些可能會引發異常的情況下循環。看起來像這樣:在Java中拋出異常的鏈接列表
public void myFunction() throws MyException {
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
throw new MyException(some, stuff, of, mine, ex);
}
}
}
導致異常的錯誤是可恢復的。它可能類似於單個更新語句中的SQL錯誤,其中while循環執行一系列更新語句。或者單個數據中的解析錯誤,其中循環正在處理多個數據片段。我需要在鏈中進一步傳遞異常,以便程序的GUI部分可以處理它,處理它並將錯誤傳遞給用戶。但我不想在這個特定的函數中殺死循環。它正在做的其他事情可能不是無效的。導致異常的錯誤可能不是致命的功能。
所以我的問題是這樣的:建立自定義異常鏈接列表(其中每個異常是一個節點,拋出的異常是列表的頭部)然後拋出列表的頭部是可接受的做法(如果有的話)一旦循環完成?
有沒有人見過這樣做?任何人都可以想到這樣做的任何潛在問題?任何人都可以想到其他更好的方法來處理根本問題:需要通過退出函數來傳遞多個不相關的異常,直到完成它爲止?
這裏有一個如何進行鏈接,並拋出可能會很簡單地實現一個例子:(比我從來沒見過這等)
public void myFunction() throws MyException {
MyException head = null;
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
MyException tmp = new MyException(some, stuff, of, mine, ex);
tmp.next(head);
head = tmp;
}
}
if(head != null)
throw head;
}
順便說一下。超越你在這裏使用鏈表或不在。有一個'java.util.LinkedList'類可以使用,所以你不必在你的item對象中編程它的功能(在這種情況下,'MyException')。 – helios 2010-02-04 21:04:01
我知道它。我不認爲你可以在這種情況下使用它,因爲列表需要被拋出,LinkedList不是可拋出的。 – 2010-02-04 22:09:08