我得到以下错误
无法恢复activity { com . XXX . yyy . zzz . home activity }:Java . lang . illegalargumentexception:比较法违反了其通用契约!
即使出现此错误,我仍在处理字符串的空情况。任何关于可能出错的提示。下面的代码
public class ConversationComparer implements Comparator<Conversation> {
@Override
public int compare(Conversation x, Conversation y) {
if (x.getLastMessageDate() == null) {
return 1;
}
if (y.getLastMessageDate() == null) {
return -1;
}
return y.getLastMessageDate().compareTo(x.getLastMessageDate());
}}
public java.util.Date getLastMessageDate() {
return lastMessageDate;
}
这就是我使用比较器的方法
if (conversationListAdapter != null) {
Collections.sort(this.list,new ConversationComparer());
conversationListAdapter.notifyDataSetChanged();
}
我唯一能看到的错误是你没有正确处理x.getLastMessageDate()和y.getLastMessageDate()
都是空
的情况。
我认为如果你在方法的开头加上这一行,它就符合合同。
if (x.getLastMessageDate() == null && y.getLastMessageDate() == null)
return 0;
您还应该再次检查 x 和 y 为 null,如果两者都为 null,则返回 0。
@Override
public int compare(Conversation x, Conversation y) {
if (x == y || (x != null && y != null && x.getLastMessageDate() == y.getLastMessageDate()))
return 0;
if (x == null)
return 1;
if (y == null)
return -1;
if (x.getLastMessageDate() == null)
return 1;
if (y.getLastMessageDate() == null)
return -1;
return y.getLastMessageDate().compareTo(x.getLastMessageDate());
}
此外,了解“getLastMessageDate()”返回什么数据类型也很有趣。
问题内容: 您好,以下是我的比较器的比较方法。我不确定是什么问题。我在堆栈溢出时查找了其他类似标题的问题和答案,但不确定我的方法有什么问题,但我一直在获取java.lang.IllegalArgumentException:比较方法违反了它的一般约定! 任何帮助将不胜感激 添加我得到的异常 问题答案: 您的方法 不是可 传递的 。如果和,则必须等于。 现在考虑这种情况: 对于,和,假设方法返回以下
使用自定义比较器执行< code > Collection.sort using >时,我得到一个< code > Java . lang . illegalargumentexception:Comparison方法违反了它的一般约定 我理解这是一个问题,因为该方法是不可传递的。在我的比较器中,调用了多个方法,我确定了违反此规则的代码段。然而,我无法修复它,也看不到它的问题。
一切似乎都运行良好(几天),但我只遇到了一次问题,并且很难重现该问题。 “比较方法违反了其总合同!”被抛出,完全让我措手不及。我有以下几点: 我的染色体类别: 我有一个ArrayList,我使用了两个Collections。排序(MyList)和集合。排序(MyList,Collections.reverseOrder())。到目前为止,他们仍在正常工作。我在100次跑步中只遇到过一次错误。这个实
嗨,下面是我的比较器的比较方法。我不知道哪里出了问题。我查了关于堆栈溢出的其他类似标题的问题和答案,但不确定我的方法有什么问题,但我不断得到java.lang.IllegalArgument异常:比较方法违反了它的一般合同! 任何帮助将不胜感激 添加我得到的异常
我想通过dateLastContact比较两个“收件人”,如果相同,就通过地址进行比较。这是我的代码: 而且我总是有这个错误: 我尝试了很多方法,但是现在,我不知道该怎么办。你能帮我吗? 收件人类别:
首先,很抱歉再次就这个话题提问。我很清楚这里有很多问题和答案。我已经读了其中的一些,但我的问题是我仍然不知道我做错了什么。这是我的代码: 看来我只是瞎了眼,看不到我的错误,所以如果你们中有人能帮我解决这个问题,我将非常感谢。 编辑:我想做的是确定一条线在左上角有0/0坐标的坐标系中是上、下、最左还是最右。这些点是double类型的。下面是错误消息: