我聽到人們提醒,每個人都應該使用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