Java - 可能失败的迭代器

时间:2012-11-26 18:04:20

标签: java exception iterator

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

3 个答案:

答案 0 :(得分:5)

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

如果异常将包装任何底层异常,那将是很好的。不幸的是,NoSuchElementException没有带有另一个异常的构造函数。因此,如果您想要传播根本原因,则必须采用不同的路线,例如抛出RuntimeException

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

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

答案 1 :(得分:0)

我认为这取决于你想如何处理错误。 也许您想要读取hasNext()中的下一个条目,因此您可以在出现问题时返回false。 从客户的角度考虑它。 客户应该如何反应?

答案 2 :(得分:0)

我见过的大多数试图制作“可能失败的迭代器”的API实际上最终工作得非常糟糕。我强烈建议您不要使用Iterator