gpt4 book ai didi

java - 是否有任何理由避免 Java 中的哨兵模式?

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:27 24 4
gpt4 key购买 nike

我听说有人建议应该始终使用 Iterator pattern控制循环而不是抛出异常(这是它在 Python iterators 中完成的方式)或使用 Sentinel pattern ,由此返回一个特殊的标记值(通常为 null)以指示迭代结束。

最佳实践是否反对哨兵模式?如果是这样,为什么? (除了它不能使用 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);
}

最佳答案

Sentinel 模式的问题在于它明确地将 sentinel 值从作为有效元素的值集中排除。即,如果您有一个可以有效包含 null 作为元素的对象列表,则使用 null 作为标记值是失败的。

关于java - 是否有任何理由避免 Java 中的哨兵模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com