gpt4 book ai didi

Java:IllegalArgumentException

转载 作者:行者123 更新时间:2023-11-30 02:42:09 26 4
gpt4 key购买 nike

我正在查看一些遗留代码,发现一个部分导致我得到“比较方法违反了其一般契约!”错误。我知道这个错误是代码不具有传递性的结果,但我不完全理解如何正确修复它。

这是导致错误的代码。

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() 可以解决问题,但事实并非如此。

最佳答案

感谢 HaifengZhang 和 YoungHobbit 的帮助,解决方案是:

public int compare(History o1, History o2) {
return o1 == o2 ? 0
: o1 == null ? -1
: o2 == null ? 1
: o1.getFamilyMembers() == null ? -1
: o2.getFamilyMembers() == null ? 1
: o1.getFamilyMembers() == o2.getFamilyMembers() ? 0
: o2.getFamilyMembers().compareTo(o1.getFamilyMembers()) != 0 ?
o2.getFamilyMembers().compareTo(o1.getFamilyMembers())
: o1.getDisease() == null ? -1
: o2.getDisease() == null ? 1
: o1.getDisease() == o2.getDisease() ? 0
: o1.getDisease().compareTo(o2.getDisease());
}

关于Java:IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com