我正在使用 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;
}
最佳答案
Comparable 是一个指定参数化类型的接口(interface):
public interface Comparable<T>{...
我们也可以说它是一个泛型类(更短)。
所以声明public class Node implements Comparable{...
意味着你想实现 Comparable 而不是特定类型。
事实上对于编译器public class Node implements Comparable{
和
public class Node implements Comparable<Object>{
因此,编译器期望找到 public int compareTo(Object obj)
您类(class)中的方法。
而编译错误信息:
"Node is not abstract and does not override abstract method compareTo(Object) in Comparable."
指定要在要实现的 Comparable 接口(interface)中使用的类:(此处为 public class Node implements Comparable<Node>{
)。
并且编译器将期望找到已实现的方法:
public int compareTo(Node obj)
关于java - 为什么 compareTo() 中的参数不接受类名而只接受对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44173948/