3

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

4

3 回答 3

5

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

如果异常可以包装任何底层异常,那就太好了。不幸的是,NoSuchElementException没有一个构造函数接受另一个异常。因此,如果您想向上传播根本原因,则必须走不同的路线,例如抛出RuntimeException

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

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

于 2012-11-26T18:07:55.683 回答
0

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

于 2012-11-26T18:09:50.147 回答
0

我见过的大多数试图使“可能失败的迭代器”的 API 最终都运行得非常糟糕。我强烈建议您不要Iterator为此使用 an 。

于 2012-11-26T18:26:19.383 回答