Java-可能失败的迭代器

Java-可能失败的迭代器,java,exception,iterator,Java,Exception,Iterator,正如标题中所描述的,我正试图设计一个对某些数据的迭代器,这可能会在某个地方失败。例如,迭代器,调用next()从DB读取下一行并继续。其他示例可能包括使用API中引发异常的对象处理数据。问题是在这种情况下如何响应,因为迭代器不允许引发任何异常。。。我们是否应该抛出NoTouchElementException,并在那里提供有意义的消息 您可以抛出未经检查的异常。抛出NoTouchElementException是有意义的,因为事实上,一个错误阻止了它成为这样一个元素 如果异常能够包装任何底层异常

正如标题中所描述的,我正试图设计一个对某些数据的迭代器,这可能会在某个地方失败。例如,
迭代器
,调用
next()
从DB读取下一行并继续。其他示例可能包括使用API中引发异常的对象处理数据。问题是在这种情况下如何响应,因为迭代器不允许引发任何异常。。。我们是否应该抛出NoTouchElementException,并在那里提供有意义的消息

您可以抛出未经检查的异常。抛出NoTouchElementException是有意义的,因为事实上,一个错误阻止了它成为这样一个元素

如果异常能够包装任何底层异常就好了。不幸的是,
NoTouchElementException
没有接受另一个异常的构造函数。因此,如果您想传播根本原因,则必须采用不同的方法,例如抛出
运行时异常

try {
    ...
} catch (<some exception type> e) {
    throw new RuntimeException("Next element not accessible", e);
}
试试看{
...
}捕获(e){
抛出新的RuntimeException(“下一个元素不可访问”,e);
}

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

我认为这取决于您希望如何处理错误。 也许您希望读取hasNext()中已经存在的下一个条目,以便在出现问题时返回false。 从客户的角度考虑。
客户机应该如何反应?

我所看到的大多数试图使“可能失败的迭代器”工作得非常糟糕的API。我强烈建议您不要为此使用
迭代器