2012-11-26 88 views
3

如標題中所述,我試圖設計一些數據的迭代器,這可能會失敗。一個例子是Iterator<DatabaseObject>,在撥打next()之後,將從數據庫讀取下一行並繼續。其他示例可能包括使用API​​引發異常的對象處理數據。問題是如何在這種情況下作出迴應,因爲Iterator不允許提出任何例外......我們應該丟棄NoSUchElementException並在那裏提供有意義的消息嗎?Java - 可能失敗的迭代器

回答

5

您可以拋出未經檢查的異常。這是合理的,拋出NoSuchElementException,因爲實際上,一個錯誤阻止了這樣一個元素。

如果異常會包裝任何潛在的異常,那將會很好。不幸的是,NoSuchElementException沒有一個構造函數接受另一個異常。所以,如果你想傳播的根本原因,你就必須去不同的路線,如投擲RuntimeException

try { 
    ... 
} catch (<some exception type> e) { 
    throw new RuntimeException("Next element not accessible", e); 
} 

或者,你可以返回一些保留值(如null)。

0

我認爲這取決於你想如何處理錯誤。 也許你想讀取hasNext()中的下一個條目,所以當發生問題時可以返回false。 從客戶角度思考。 客戶應該如何反應?

0

我見過的大多數API都試圖讓「可能失敗的迭代器」真的變得非常糟糕。我強烈建議你只需就不要使用Iterator