Я наткнулся на ошибку в API коллекций Java в Collections.java.
Вот дословный код из источника JDK. Как вы знаете, тег версии JavaDoc гласит: «1.106, 21.04.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 кандидат = i.next () D'о! Вызов i.next () для Итератора без предварительной проверки hasNext ()? Это просто просьба об исключении.
Конечно, что-то подобное должно было быть замечено во время кодирования? Это означает, что использование API должно проверять, содержит ли коллекция хотя бы два элемента.