对于 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,key);
    }

    private boolean containsKeyAux(BinaryNodekeyvalue<Comparable,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,Comparable key){
        return getAux(root,key);
    }

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

}

在第 40 行和第 41 行(方法 containsKeyAux 的第 3 行和第 4 行),它说“方法 compareto(Comparable) 未定义为 Comparable 类型”,这让我大吃一惊,因为 compareto 方法实际上仅在 Comparable 接口中定义。 VS Code 还在第 6 行向我显示了一条警告,内容为“类型参数 Comparable 隐藏了 Comparable 类型”,但我试图使 Comparable 类型尽可能通用,因为节点的键可能是字符串、整数或不同类型的对象。

解决方法

当您声明这样的泛型 AVLTree<Comparable,V> 时,您创建了一个具有两个泛型类型 Comparable 和 V 的类,而 Comparable 与接口 Comparable 无关,它们只是碰巧具有相同的名称.

你可能是说

class AVLTree<T extends Comparable,V>