Rumah >Java >javaTutorial >Ralat Pembanding Java: Bagaimana untuk Membetulkan 'Kaedah Perbandingan Melanggar Kontrak Amnya'?
Ralat Java: Mendedahkan Pelanggaran Kontrak Umum Kaedah Perbandingan
Ralat "Kaedah perbandingan melanggar kontrak amnya" timbul apabila pembanding ditakrifkan di Jawa gagal mematuhi prinsip asas transitivity. Prinsip ini menentukan bahawa jika objek A lebih besar daripada objek B, dan objek B lebih besar daripada objek C, maka A juga mesti lebih besar daripada C.
Untuk menyelesaikan ralat ini, adalah penting untuk memastikan bahawa yang ditakrifkan pembanding mematuhi peraturan ini dengan ketat. Dalam contoh yang diberikan, isunya terletak dalam kaedah compareTo(). Beberapa percanggahan jelas:
Untuk membetulkan ralat ini, versi pembanding yang disemak dipersembahkan:
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! }
Pembanding yang dikemas kini ini memastikan bahawa kaedah perbandingan mematuhi peraturan transitiviti. Dengan menangani ketidakkonsistenan ini, ralat "Kaedah Perbandingan melanggar kontrak amnya" akan diselesaikan.
Atas ialah kandungan terperinci Ralat Pembanding Java: Bagaimana untuk Membetulkan 'Kaedah Perbandingan Melanggar Kontrak Amnya'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!