오류: Java의 CompareTo 메소드가 일반 계약을 위반합니다
"비교 메소드가 일반 계약을 위반합니다." 오류가 발생하면 실망스러울 수 있습니다. 광범위한 연구에도 불구하고 많은 개발자가 이 문제를 해결하는 데 어려움을 겪고 있습니다.
이 오류는 Java에서 객체를 비교하는 데 사용되는 CompareTo 메서드가 전이성 요구 사항을 위반할 때 발생합니다. 전이성은 A가 B보다 크고 B가 C보다 크면 A가 C보다 커야 함을 나타냅니다.
제공된 코드 조각에서 CollectionItems에 대한 사용자 정의 비교기가 구현되었지만 전이성 위반.
오류 1:
if (card1.getRarity() < card2.getRarity()) { return 1; }
여기서 카드1.getRarity()가 카드2.getRarity()보다 큰 경우 올바른 반환 값은 1이 아니라 -1이어야 합니다.
오류 2:
if (card1.getId() == card2.getId()) { //... } return -1;
ID가 동일하지 않은 경우, 올바른 반환 값은 카드1.getId()가 카드2.getId()보다 작으면 -1이어야 하고, 카드1.getId()가 더 크다면 1이어야 합니다.
수정된 비교기:
이러한 오류를 해결하기 위해 다음을 준수하는 수정된 비교기 버전이 있습니다. 이행성:
if (card1.getSet() > card2.getSet()) { return 1; } if (card1.getSet() < card2.getSet()) { return -1; }; if (card1.getRarity() < card2.getRarity()) { return 1; } if (card1.getRarity() > card2.getRarity()) { return -1; } if (card1.getId() > card2.getId()) { return 1; } if (card1.getId() < card2.getId()) { return -1; } return cardType - item.getCardType(); //watch out for overflow!
위 내용은 내 Java `compareTo` 메소드가 일반 계약을 위반하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!