不兼容的类型:Node 无法转换为 Comparable(当作为参数传递时)

incompatible types: Node cannot be converted to Comparable (when passing as a parameter)

我现在在尝试使用通用数据类型对二叉搜索树建模时遇到问题。我最终会读入字符串值并将它们插入到二叉树中,因此在 Nodez class 中声明了字符串。 Nodez class 是我定义的 class 来声明要传递给搜索树的节点。字符串值将是此 class 的属性。 BSTree 基于 class 定义如下:

public class BSTree<E extends Comparable<E>> implements BSTreeAPI<E>    

我的问题出在主要代码块上。当我尝试插入 Nodez class 的实例时发生错误。这里的确切错误是:"incompatible types: Nodez cannot be converted to Comparable"

我花了很多时间尝试调试它,但我对泛型不是很好?

有什么建议吗?谢谢!

package twotreesanalyzer;
import java.io.IOException;
import java.io.PrintStream;
import java.util.function.Function;

public class TwoTreesAnalyzer 
{

    public static class Nodez <E extends Comparable<E>> {
        public String x;
        public E node;

        public String get(){
            return x;
        }
    }

public static void main(String[] args) throws AVLTreeException, BSTreeException, IOException
    {        

        Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);

        BSTree bstTest = new BSTree();

        Nodez e1 = new Nodez();
        e1.x = "fresh";


        bstTest.insert(e1);

        System.out.println(bstTest.inTree(e1.get()));

    }
}

现在您的 BSTree 正在尝试比较您的 nodez 对象,如果这是您希望它运行的方式,您需要在您的 Nodez class 上实现 Comparible。我以集合树为例快速修复了它。

public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
        public String x;
        public E node;

        public String get(){
            return x;
        }

        @Override
        public int compareTo(Nodez<E> node) {
            return node.x.compareTo(x);
        }
    }

public static void main(String[] args) throws IOException
    {        

        Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);

        TreeSet<Nodez<String>> bstTest = new TreeSet<>();

        Nodez<String> e1 = new Nodez<>();
        e1.x = "fresh";


        bstTest.add(e1);

        System.out.println(bstTest.contains(e1));

    }

但是我认为您希望节点能够接受任何可比较的通用类型,在这种情况下,应该更像这样订购它:

public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
        public E x;
        public Nodez<E> node;

        public E get(){
            return x;
        }

        @Override
        public int compareTo(Nodez<E> node) {
            return node.x.compareTo(x);
        }
    }

public static void main(String[] args) throws IOException
    {        

        Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);

        TreeSet<Nodez<String>> bstTest = new TreeSet<>();

        Nodez<String> e1 = new Nodez<>();
        e1.x = "fresh";


        bstTest.add(e1);

        System.out.println(bstTest.contains(e1));
    }