我在Java集合API的Collections.java中发现了一个bug。
以下是来自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;
}
如果您仔细分析这个方法,很快就会发现一个错误:T candidate = i.next()。天啊!在没有先检查hasNext()的情况下调用迭代器上的i.next()?这只是在寻求异常。
肯定应该在编码过程中注意到这样的问题吧?这意味着使用API必须检查集合是否至少有两个元素。