首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: IllegalArgumentException

Java: IllegalArgumentException
EN

Stack Overflow用户
提问于 2016-12-26 12:59:13
回答 0查看 135关注 0票数 1

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

以下是导致该错误的代码。

代码语言:javascript
复制
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()就能解决这个问题,但事实并非如此。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41326592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档