我正在查看一些遗留代码,我发现有一段代码导致我得到一个“比较方法违反了它的一般契约!”错误。我知道这个错误是代码不能传递的结果,但我不完全理解如何正确修复它。
以下是导致该错误的代码。
private void sortHistories(List<History> histories) {
Collections.sort(histories, new Comparator<History>() {
@Override
public int compare(History o1, History o2) {
return o1 == o2 ? 0
: o1 == null ? -1
: o2 == null ? 1
: o1.getFamilyMembers().equals(o2.getFamilyMembers()) ? 0 //getFamilyMembers() returns a string
: o1.getFamilyMembers() == null ? -1
: o2.getFamilyMembers() == null ? 1
: o2.getFamilyMembers().compareTo(o2.getFamilyMembers()) != 0 ?
o2.getFamilyMembers().compareTo(o2.getFamilyMembers())
: o1.getDisease().equals(o2.getDisease()) ? 0 //getDisease() also returns a string
: o1.getDisease() == null ? -1
: o2.getDisease() == null ? 1
: o1.getDisease().compareTo(o2.getDisease());
}
});
}最初,代码在比较字符串getDisease()和getFamilyMembers()时使用的是==而不是equals()。我以为把==改成equals()就能解决这个问题,但事实并非如此。
https://stackoverflow.com/questions/41326592
复制相似问题