我听到人们提醒,每个人都应该使用Iterator pattern控制回路而不是抛出一个异常(这是它是如何在Python iterators完成)或使用Sentinel pattern,其中一个特殊的前哨值(通常null
)返回指示迭代的结束。是否有任何理由避免Java中的哨兵模式?
最佳做法是否建议不要使用哨兵模式?如果是这样,为什么? (而不是在Java 1.5中使用foreach
语法)。
编辑: 代码示例1 - 哨兵模式
Reader r = ...;
for(int val = r.read(); val != -1; val = r.read()) {
doSomethingWith(val);
}
代码示例2 - 迭代器模式
for(Iterator<Thing> it = getAnIterator() ; it.hasNext();) {
Thing t = it.next();
doSomethingWith(t);
}
你可能想要显示你所问的三种循环模式中的每一种的例子。 – 2009-11-10 17:32:51
没有包含python的方式,提出控制流的异常不是我正在认真暗示的东西。 – 2009-11-10 17:49:41
+1仅用于I/O for循环 - 我从来没有见过这样做。 – 2009-11-11 02:16:39