重载未按预期运行

Overloading not behaving as expected

我正在制作一家酒店,我的客户以树形结构存储,以便于搜索。

我的 Client class 有两个 compareTo 方法。一种是将 Client 与另一个 Client 进行比较,另一种是将其与 int 进行比较。 Client 应该是 Comparable 类型,因为它位于实现 Comparable.

的树结构中
//compare Client to int
public int compareTo(int arg0) {
    int result = this.clientId.compareTo(arg0);
    return result;
}

//compare Client to object
public int compareTo(Object o) {
    return (this.clientId).compareTo(((Client)o).clientId);
}

但是没有达到预期的效果。每次调用此函数时,它都会使用 compareTo(Object) 方法和 returns 错误,即我的 int 无法转换为 Client。我想这是因为 Objectint(?) 的超级 class 但不太清楚如何修复它。我尝试解决这个问题,但似乎无法在不更改我的整个代码的情况下解决它。

Java 的 TreeMapTreeSet 使用 compareTo(T) 方法(即,对于您似乎正在使用的原始类型,compareTo(Object),所以你的重载方法被忽略了。

虽然您当然可以重载 compareTo 方法,但您不能强制 Java 的数据结构使用它。

一种可能的方法是让 compareTo(Object) 方法动态检查类型:

//compare Client to object
public int compareTo(Object o) {
    Integer toCompare;
    if (o instanceof Client) {
        toCompare = ((Client) o).clientId;
    } else if (o instanceof Integer) {
        toCompare = (Integer) o;
    } else {
        throw new IllegalArgumentException();
    }

    return (this.clientId).compareTo(toCompare);
}