我偶然发现了Collections.java中Java Collections API中的一个错误.
以下是JDK源代码中的代码.您知道,JavaDoc版本标记为"1.106,04/21/06".该方法位于第638行.
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
Iterator<? extends T> i = coll.iterator();
T candidate = i.next();
while (i.hasNext()) {
T next = i.next();
if (next.compareTo(candidate) > 0)
candidate = next;
}
return candidate;
}
Run Code Online (Sandbox Code Playgroud)
如果您花一点时间来分析该方法,您将很快发现错误:T candidate = i.next().D'哦!在迭代器上调用i.next()而不首先检查hasNext()?那只是要求一个例外.
当然在编码过程中应该发现类似的东西?这意味着使用API必须检查集合是否至少包含两个元素.
Jon*_*eet 21
不 - 这意味着尝试查找空集合的最大元素是无效的.这在API文档中指定:
Throws:
NoSuchElementException - if the collection is empty.
Run Code Online (Sandbox Code Playgroud)
Iterator.next()如果没有下一个元素,这就是要记录的内容,因此它正在完成它的意图.
请注意,在第一次调用next()之后,调用hasNext()来检查是否存在多个元素.
| 归档时间: |
|
| 查看次数: |
1425 次 |
| 最近记录: |