gpt4 book ai didi

java - "Comparison method violates its general contract!"

转载 作者:行者123 更新时间:2023-12-02 05:43:56 25 4
gpt4 key购买 nike

有人可以简单地解释一下,为什么这段代码会抛出异常“比较方法违反了其一般契约!”,以及如何修复它?

private int compareParents(Foo s1, Foo s2) {
if (s1.getParent() == s2) return -1;
if (s2.getParent() == s1) return 1;
return 0;
}

最佳答案

您的比较器不具有传递性。

AB 的父级,BC 的父级。既然A > BB > C,那么一定是A > C。但是,如果在 AC 上调用比较器,它将返回零,这意味着 A == C。这违反了约定,因此引发异常。

库能够检测到这一点并让您知道,而不是表现得异常,这真是太好了。

满足 compareParents() 中传递性要求的一种方法是遍历 getParent() 链,而不是仅查看直接祖先。

关于java - "Comparison method violates its general contract!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56115478/

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