После перехода с Java 6 на 7 одна из используемых приложением библиотек стала валиться с:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
Причина кроется в том, что в семерке переработана имплементация алгоритма сортировки, используемая в java.util.Arrays.sort и java.util.Collections.sort, и в случае некорректной реализации интерфейса Comparable она может генерировать данное исключение. Под некорректной понимается реализация, неконсистентная с реализацией equals() (например, если для некоторых эквивалентных объектов она возвращает значение, отличное от 0). Найти эту информацию можно в заметках о совместимости Java 7.
Выход - переписать реализацию Comparable (в моем случае - не вариант, т.к. библиотека сторонняя и закрытая) либо воспользоваться системным свойством "java.util.Arrays.useLegacyMergeSort", позволяющим переключиться на старую имплементацию сортировки (сказать по правде, не пробовал, т.к. просто вернулся на JDK 6).
ЗЫ Спасибо http://www.yossale.com/?p=355.
Комментариев нет:
Отправить комментарий