エラー: Java の CompareTo メソッドが一般規約に違反しています
「Comparison メソッドは一般規約に違反しています」エラーが発生するとイライラすることがあります。広範な調査にも関わらず、多くの開発者がこの問題の解決に苦労しています。
このエラーは、Java でオブジェクトを比較するために使用される CompareTo メソッドが推移性の要件に違反している場合に発生します。推移性により、A が B より大きく、B が C より大きい場合、A は C より大きくなければならないことが決まります。
提供されたコード スニペットでは、CollectionItems のカスタム コンパレーターが実装されていましたが、エラーが含まれていました。推移性の違反。
エラー1:
if (card1.getRarity() < card2.getRarity()) { return 1; }
ここで、card1.getRarity() がcard2.getRarity() より大きい場合、正しい戻り値は 1 ではなく -1 である必要があります。
エラー 2:
if (card1.getId() == card2.getId()) { //... } return -1;
ID が一致しない場合等しい場合、正しい戻り値は、card1.getId() が Card2.getId() より小さい場合は -1、card1.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 中国語 Web サイトの他の関連記事を参照してください。