gpt4 book ai didi

java - 即使在检查 null 之后,比较方法也违反了它的一般契约(Contract)

转载 作者:行者123 更新时间:2023-11-29 04:48:23 26 4
gpt4 key购买 nike

我收到以下错误

无法恢复 Activity {com.xxx.yyy.zzz.HomeActivity}:java.lang.IllegalArgumentException:比较方法违反了它的一般契约!

我正在处理字符串的 null 情况,即使出现此错误。关于可能出错的任何提示。代码如下

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 和 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 - 即使在检查 null 之后,比较方法也违反了它的一般契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36345930/

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