有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重载未按预期运行

我正在做一个酒店,我的客户被存储在一个树形结构,以便他们可以很容易地搜索

我的客户机类有两个compareTwo方法。一个用于将客户端与另一个客户端进行比较,另一个用于将其与int进行比较。客户端应为Compariable类型,因为它位于实现Compariable的树结构中

//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)方法并返回一个错误,即my int无法转换到客户端。我想这是因为Object是int(?)的超类但我不太知道如何修复它。我试图解决这个问题,但似乎无法在不修改整个代码的情况下解决它

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    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);
    }