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