如標題中所述,我試圖設計一些數據的迭代器,這可能會失敗。一個例子是Iterator<DatabaseObject>
,在撥打next()
之後,將從數據庫讀取下一行並繼續。其他示例可能包括使用API引發異常的對象處理數據。問題是如何在這種情況下作出迴應,因爲Iterator不允許提出任何例外......我們應該丟棄NoSUchElementException
並在那裏提供有意義的消息嗎?Java - 可能失敗的迭代器
3
A
回答
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
。
相關問題
- 1. 失敗安全與失敗快速迭代器(矢量)
- 2. ConcurrentHashMap中的失敗安全迭代器
- 3. 失敗快速迭代器實現
- 4. 在ostream中使用迭代器失敗
- 5. Red5chat連接迭代器失敗
- 6. PHP數組迭代失敗
- 7. 複合迭代失敗(.net)
- 8. JS:對象迭代失敗
- 9. 第一次迭代失敗
- 10. 文件迭代失敗
- 11. 是否有可能在Java中擴展迭代器的功能?
- 12. Java:迭代器
- 13. 迭代幾個可能的迭代器之一
- 14. 如何找回失敗的迭代SQL
- 15. 有沒有一種方法,這段代碼可以失敗沒有迭代器?
- 16. Java HashMap迭代器
- 17. 堆迭代器java
- 18. 實現可迭代在Java中remove()方法和迭代器()
- 19. 可逆迭代器
- 20. 迭代器的迭代器
- 21. unordered_map迭代器迭代爲空指針,違反可能性
- 22. 在Boost MultiIndex容器中移動equal_range時迭代器失敗
- 23. 迭代器性能
- 24. C#:foreach內的收益率返回失敗 - 正文不能是迭代器塊
- 25. 斷言失敗,列表迭代不dereferencable
- 26. cakephp3- foreach循環迭代失敗
- 27. 迭代列表對象失敗
- 28. 通過文件迭代失敗
- 29. IF-ELSE迭代:String.contains()每次都失敗
- 30. 迭代失敗,排序陣列