作为编写迭代器的一部分,我发现自己正在编写以下代码(剥离错误处理)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
发现它比阅读起来稍微容易一些
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
我知道这是一个简单的示例,在可读性方面的差异可能不会那么大,但我对这样的一般情况感兴趣:在没有涉及异常的情况下,使用try-finally是否不好?如果在简化代码时实际上是首选。
如果不好,为什么?风格,性能,陷阱...?
结论 谢谢大家的回答!我猜得出的结论(至少对我而言)是,如果第一个示例是通用模式,则它可能更具可读性,但事实并非如此。因此,使用超出其目的的构造所带来的混乱,以及可能造成混淆的异常流,将胜过任何简化。
Iterator
,您实际上确实需要某种预取才能hasNext()
工作。自己尝试。
Iterator
是,您需要获取in的值hasNext()
(因为获取值通常是找出值是否存在的唯一方法),然后next()
像OP一样将其返回。
finally
块。