java.lang.Iterator
接口有3种方法:hasNext
,next
和remove
。为了实现一个只读的迭代器,你要为那些2提供一个实现:hasNext
和next
。执行java.lang.Iterator时如何处理异常
我的问题是,这些方法不声明任何异常。因此,如果我的代码在迭代过程中声明异常,我必须将我的迭代代码放在try/catch块中。
我目前的政策已经重新抛出封闭在RuntimeException
例外。但是这有问题,因为检查的异常会丢失,客户端代码不再可以明确地捕获这些异常。
我怎样才能解决这个限制在迭代器类?
这里是为了清晰起见,示例代码:
class MyIterator implements Iterator
{
@Override
public boolean hasNext()
{
try
{
return implementation.testForNext();
}
catch (SomethingBadException e)
{
throw new RuntimeException(e);
}
}
@Override
public boolean next()
{
try
{
return implementation.getNext();
}
catch (SomethingBadException e)
{
throw new RuntimeException(e);
}
}
...
}
另一种选择,如果你无法控制用户界面的客户端代码:创建登记例外通过getter或一些地方入店的迭代器,或拨打一个回调接口,或者是你控制,并可以在任何地方显示错误。如果这对您有用,您可以创建一个“CatcherIterator”,它简单地包装一个运行时异常thrower迭代器,并捕获所有可能的异常,将它们重定向到属性或回调接口。 – helios 2010-02-05 08:27:52