Обяснение на предупрежденията

Обяснение на предупрежденията #

Тази страница описва различни предупреждения, които могат да възникнат при проверка на коректността на имплементация на Comparator. Всяко предупреждение съответства на конкретно договорно свойство, което добре имплементиран компаратор трябва да спазва.

ANTI_SYMMETRY #

Компаратор нарушава анти-симетрията, ако връща несъвместими резултати при обръщане на реда на аргументите му. По-конкретно, за всякакви обекти x и y, ако compare(x, y) < 0, тогава compare(y, x) трябва да върне стойност по-голяма от 0.

CONSISTENCY #

Компаратор липсва консистентност, ако дава различни резултати при сравняване на една и съща двойка обекти многократно, при условие че не са направени промени на обектите. Консистентността гарантира, че повтарящите се извиквания на компаратора произвеждат същия резултат за същите входни данни.

CONSISTENT_WITH_EQUALS #

Компаратор е несъвместим с equals, ако счита два обекта за равни (т.е. compare(x, y) == 0), но x.equals(y) връща false. За да бъде компараторът съвместим с equals, равенството, подразбирано от компаратора, трябва да съответства на метода equals на сравняваните обекти.

REFLEXIVITY #

Компаратор нарушава рефлексивността, ако не връща нула при сравняване на обект със себе си. Тоест, за всеки обект x, compare(x, x) винаги трябва да връща 0.

TRANSITIVITY #

Компаратор липсва транзитивност, ако не поддържа последователен ред при множество сравнения. По-конкретно, ако compare(x, y) < 0 и compare(y, z) < 0, тогава compare(x, z) също трябва да бъде по-малко от 0. Нарушаването на транзитивността може да доведе до непредсказуемо и неправилно поведение при сортиране.

SERIALIZABLE #

Деактивирано по подразбиране.

Компаратор трябва да имплементира интерфейса Serializable, ако се предвижда да се използва в контексти, където се изисква сериализация, като например в сериализируеми структури от данни като TreeSet или TreeMap. Неспазването на това може да доведе до изключения по време на изпълнение при опит за сериализация.

Препратки #