【发布时间】:2022-01-04 14:31:42
【问题描述】:
谁能简单解释一下,为什么这段代码会抛出异常,“比较方法违反了它的一般约定!”,我该如何解决?
private int compareParents(Foo s1, Foo s2) {
if (s1.getParent() == s2) return -1;
if (s2.getParent() == s1) return 1;
return 0;
}
【问题讨论】:
-
异常的名称和类别是什么?它是 IllegalArgumentException 吗?如果我不得不猜测,我会认为您应该使用
s1.getParent().equals(s2)而不是s1.getParent() == s2。 -
还有抛出的异常。
-
我对 Java 或 Java 比较 API 了解不多,但这种比较方法似乎大错特错。假设
s1是s2的父级,而s2不是s1的父级。那么compareParents(s1, s2)是0,但compareParents(s2, s1)是1。那没有意义。 (此外,它不是传递的,就像下面提到的 aix。) -
在 java 中,您可以使用 equals(返回布尔值)或 compareTo(返回 -1、0 或 +1)。在您的 Foo 类中覆盖此函数,然后,您可以检查 s1.getParent().equals(s2) ...
标签: java comparator