Wyjaśnienie ostrzeżeń

Wyjaśnienie ostrzeżeń #

Ta strona przedstawia różne ostrzeżenia, które mogą pojawić się podczas weryfikacji poprawności implementacji Comparatora. Każde ostrzeżenie odpowiada konkretnej właściwości umownej, którą dobrze zaimplementowany comparator powinien spełniać.

ANTI_SYMMETRY #

Comparator narusza zasadę antysymetrii, jeśli zwraca niespójne wyniki, gdy kolejność jego argumentów zostanie odwrócona. Konkretnie, dla dowolnych obiektów x i y, jeśli compare(x, y) < 0, to compare(y, x) powinno zwrócić wartość większą od 0.

CONSISTENCY #

Comparator jest niespójny, jeśli przy wielokrotnym porównywaniu tej samej pary obiektów (przy założeniu, że obiekty nie uległy zmianie) zwraca różne wyniki. Spójność gwarantuje, że powtarzające się wywołania comparatora dają ten sam wynik dla tych samych danych wejściowych.

CONSISTENT_WITH_EQUALS #

Comparator jest niespójny z metodą equals, jeśli uznaje dwa obiekty za równe (tzn. compare(x, y) == 0), a jednocześnie x.equals(y) zwraca false. Aby comparator był spójny z equals, równość implikowana przez comparatora powinna być zgodna z metodą equals porównywanych obiektów.

REFLEXIVITY #

Comparator narusza zasadę zwrotności, jeśli nie zwraca zera przy porównywaniu obiektu z samym sobą. Innymi słowy, dla dowolnego obiektu x, compare(x, x) powinno zawsze zwracać 0.

TRANSITIVITY #

Comparator jest pozbawiony przechodniości, jeśli nie utrzymuje spójnego porządku przy wielokrotnych porównaniach. Konkretnie, jeśli compare(x, y) < 0 oraz compare(y, z) < 0, to compare(x, z) również powinno być mniejsze od 0. Naruszenie przechodniości może prowadzić do nieprzewidywalnych i błędnych zachowań sortowania.

SERIALIZABLE #

Wyłączone domyślnie.

Comparator powinien implementować interfejs Serializable, jeśli ma być używany w kontekstach wymagających serializacji, takich jak struktury danych obsługujące serializację, np. TreeSet lub TreeMap. Nieprzestrzeganie tego może skutkować wyjątkami w czasie wykonywania podczas próby serializacji.

Źródła #