有 Java 编程相关的问题?

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

java compareTo(Comparable)方法对于Comparable类型未定义

因此,我正在构建一个库作为一个项目,它涵盖了大部分数据结构,而不是所有数据结构,我发现自己遇到了这个问题:

package structure.tree;

import structure.Structure;
import structure.node.BinaryNodeKeyValue;

public class AVLTree<Comparable,V> extends Tree<BinaryNodeKeyValue<Comparable,V>> {
    
    private static final long serialVersionUID = 5046115177325966348L;

    public AVLTree(){

    }

    @Override
    public int compareTo(Structure<BinaryNodeKeyValue<Comparable,V>> o) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public boolean containsValue(BinaryNodeKeyValue<Comparable,V> elem) {
        return containsValueAux(((BinaryNodeKeyValue<Comparable,V>) super.getValue()), elem);
    }

    private boolean containsValueAux(BinaryNodeKeyValue<Comparable,V> root, BinaryNodeKeyValue<Comparable,V> elem){
        if(root == null) return false;
        else {
            if(root.equals(elem)) return true;
            else return containsValueAux(root.getLeft(), elem) || containsValueAux(root.getRight(), elem);
        }
    }

    public boolean containsKey(Comparable key){
        return containsKeyAux(((BinaryNodeKeyValue<Comparable,V>) super.getValue()), key);
    }

    private boolean containsKeyAux(BinaryNodeKeyValue<Comparable,V> root, Comparable key){
        if(root == null) return false;
        else {
            if(root.getKey().compareTo(key) > 0) return containsKeyAux(root.getRight(), key);
            else if(root.getKey().compareTo(key) < 0) return containsKeyAux(root.getLeft(), key);
            else return true;
        }
    }

    @Override
    public void deleteValue(BinaryNodeKeyValue<Comparable,V> elem) {
        // TODO Auto-generated method stub

    }
    
    @Override
    public void insertValue(BinaryNodeKeyValue<Comparable,V> elem) {
        // TODO Auto-generated method stub

    }

    @Override
    public BinaryNodeKeyValue<Comparable,V>[] toArray() {
        // TODO Auto-generated method stub
        return null;
    }

    public BinaryNodeKeyValue<Comparable,V> get(BinaryNodeKeyValue<Comparable,V> root, Comparable key){
        return getAux(root, key);
    }

    private BinaryNodeKeyValue<Comparable, V> getAux(BinaryNodeKeyValue<Comparable, V> root, Comparable key) {
        return null;
    }

}

在第40行和第41行(method Containeskeyaux的第3行和第4行),它说“对于可比较的类型,method compareTo(Comparable)是未定义的”,这让我大吃一惊,因为method compareTo实际上只是在可比较的接口中定义的。 VS代码还在第6行向我显示一条警告,说“type参数Comparable正在隐藏type Comparable”,但我正在尝试使Comparable类型尽可能通用,因为节点的键可以是字符串、整数或其他类型的对象


共 (1) 个答案

  1. # 1 楼答案

    当您声明这样的泛型AVLTree<Comparable,V>时,您已经创建了一个类,它有两个泛型类型Comparable和V,Comparable与接口Comparable无关,它们恰好有相同的名称

    你可能是说

    class AVLTree<T extends Comparable, V>