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中文网其他相关文章!