Java-“比较法违反了它的总合同!”
有人可以简单地向我解释一下,为什么此代码会引发异常,“比较方法违反了它的一般约定!”,我该如何解决?
private int compareParents(Foo s1, Foo s2) { if (s1.getParent() == s2) return -1;
if (s2.getParent() == s1) return 1;
return 0;
}
回答:
你的比较器不是可传递的。
让A
是的父B
,并B
成为母公司C
。既然A > B
和B > C
,那一定是这样A > C
。但是,如果在A
和上调用比较器C
,它将返回零,即A == C
。这违反了合同,因此引发异常。
该库可以很好地检测到这一点并让你知道,而不是行为不规律。
满足传递性要求的一种方法compareParents()
是遍历整个getParent()
链,而不仅仅是查看直接祖先。
以上是 Java-“比较法违反了它的总合同!” 的全部内容, 来源链接: utcz.com/qa/405652.html