重载行为不符合预期

zzwlnbp8  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(407)

我正在做一个酒店,我的客户被存储在一个树形结构,以便他们可以很容易地搜索。
我的客户机类有两个comparetwo方法。一个用于将客户机与另一个客户机进行比较,另一个用于将其与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)方法并返回一个错误,我的int不能被转换到客户机。我想这是因为object是int(?)的超类,但不太知道如何修复它。我试图解决这个问题,但似乎无法解决它不改变我的整个代码。
谢谢你的帮助!

7kjnsjlb

7kjnsjlb1#

java 的 TreeMap 以及 TreeSet 使用 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);
}

相关问题