簡體   English   中英

未定義 Comparable 類型的 compareTo(Comparable) 方法

[英]The method compareTo(Comparable) is undefined for the type 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 行(方法 containsKeyAux 的第 3 行和第 4 行)它說“Comparable 類型的方法 compareTo(Comparable) 是未定義的”,這讓我大吃一驚,因為方法 compareTo 實際上只在 Comparable 接口中定義。 VS Code 還在第 6 行向我顯示了一條警告,上面寫着“類型參數 Comparable 隱藏了 Comparable 類型”,但我試圖使 Comparable 類型盡可能通用,因為節點的鍵可能是字符串、Integer 或不同類型的 Object。

當您聲明像這樣的AVLTree<Comparable,V>的泛型時,您創建了一個具有兩個泛型類型 Comparable 和 V 的 class ,而 Comparable 與接口Comparable無關,它們恰好具有相同的名稱。

你可能是說

class AVLTree<T extends Comparable, V>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM