Java 오류: 비교 메서드의 일반 계약 위반 공개
"비교 메서드가 일반 계약을 위반합니다." 오류는 비교자가 정의된 경우 발생합니다. Java에서는 전이성의 기본 원칙을 준수하지 않습니다. 이 원칙은 객체 A가 객체 B보다 크고 객체 B가 객체 C보다 크면 A도 C보다 커야 함을 나타냅니다.
이 오류를 해결하려면 정의된 내용을 확인하는 것이 중요합니다. 비교기는 이 규칙을 엄격하게 따릅니다. 제공된 예에서 문제는 CompareTo() 메서드 내에 있습니다. 몇 가지 불일치가 분명합니다.
이러한 오류를 수정하기 위해 비교기의 수정된 버전이 제공됩니다.
public int compareTo(Object o) { if (this == o) { return 0; } CollectionItem item = (CollectionItem) o; Card card1 = CardCache.getInstance().getCard(cardId); Card card2 = CardCache.getInstance().getCard(item.getCardId()); 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 비교기 오류: '비교 방법이 일반 계약을 위반합니다'를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!