首页 > 解决方案 > Java Bound 不匹配错误,但我扩展了 Comparable 接口

问题描述

我正在尝试实现一个以堆为节点的二叉树。但我无法弄清楚为什么会出现这个错误。

首先,这些是类:

二叉树:

public class MyBinarySearchTree<E extends Comparable<E>> implements Serializable{...}

堆:

public class MyHeap<E extends Comparable<E>> implements Comparable<E>{...}

价值出现:

public class ValueOccurance<E extends Comparable<E>> implements Comparable<E> {

    private E data;
    private int occur;
    @Override
    public int compareTo(E o) {
        return data.compareTo(o);
    }
}

所以,问题来了:主要是我不能创建 x 和 y。

MyHeap<ValueOccurance<Integer>> x = new MyHeap<>();
MyBinarySearchTree<ValueOccurance<Integer>> y = new MyBinarySearchTree<>();

你能告诉我我的错在哪里吗?

问候。

标签: java

解决方案


MyHeap并且ValueOccurence需要与自身的实例相比较,而不是E.

请注意以下内容与您的代码之间的差异(在下面突出显示):

public static class MyBinarySearchTree<E extends Comparable<E>> implements Serializable{  };

public static class MyHeap<E extends Comparable<E>> implements Comparable<MyHeap<E>>{  
                                                                          ^^^^^^^^^
    public int compareTo(MyHeap<E> other) {
        return 0;
    }
}

public class ValueOccurance<E extends Comparable<E>> implements Comparable<ValueOccurance<E>> {
                                                                           ^^^^^^^^^^^^^^^^^
    private E data;
    private int occur;
    @Override
    public int compareTo(ValueOccurance<E> o) {
                         ^^^^^^^^^^^^^^^^^^^
        return data.compareTo(o.data);
                              ^^^^^^
    }
}

public static void main(String[] args) throws IOException
{
    MyHeap<ValueOccurance<Integer>> x = new MyHeap<>();
    MyBinarySearchTree<ValueOccurance<Integer>> y = new MyBinarySearchTree<>();
}

推荐阅读