java为什么compareTo()中的参数不接受类名,而只接受对象?
我正在用java中的优先级队列实现Dijkstra算法。我正在为队列使用类“节点”的对象。为了实现这一点,我重写了Node类中的compareTo()方法。如果我使用“Object obj”作为compareTo()的参数,它可以正常工作。然而,当我将“Node obj”作为compareTo()的参数时,显示了一个错误:“Node不是抽象的,并且不会覆盖Comparable中的抽象方法compareTo(Object)。”据我所知,这应该是可能的。怎么了
public class Node implements Comparable
{ int key;
int val;
public Node(int v)
{ val=v;
key=0;
}
@Override
public int compareTo(Object obj)
{ Node nd=(Node) obj;
return this.key-nd.key;
}
public Node(int v, int k)
{ val=v;
key=k;
}
}
如果我在上面的代码正常工作时执行此操作(下面的代码),则会显示错误
@Override
public int compareTo(Node obj)
{
return this.key-obj.key;
}
# 1 楼答案
是一个通用接口,因为您没有绑定任何类型,所以默认为对象绑定所需的类型(
Comparable<Node>
),这样就可以了# 2 楼答案
而是这样做
这是因为Comparable是一个generic接口,如文档所述,它接受一个参数
T
如果没有这个参数,它将解析为
Object
,这是您不需要的