有 Java 编程相关的问题?

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

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

共 (2) 个答案

  1. # 1 楼答案

    Interface Comparable<T>
    

    是一个通用接口,因为您没有绑定任何类型,所以默认为对象绑定所需的类型(Comparable<Node>),这样就可以了

  2. # 2 楼答案

    而是这样做

    public class Node implements Comparable <Node>{
    

    这是因为Comparable是一个generic接口,如文档所述,它接受一个参数T

    T - the type of objects that this object may be compared to

    如果没有这个参数,它将解析为Object,这是您不需要的