java泛型绑定不匹配:type对象不是绑定参数< e>>的有效替代物

knsnq2tg  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(285)

我正在尝试建立一个通用的二叉树,二叉树的节点将由对象组成。为了插入和移动二叉树,我使用了可比较的接口,但问题是我不能创建一个二叉树对象并生成类型为“object”的泛型。
二叉树:

public class BinTreeGen<E extends Comparable<E>> implements BinTreeGenInterface<E> {
    private BinNodeGen<E> root = null;

    BinTreeGen() {
        root = null;
    }

    BinTreeGen(BinNodeGen<E> root) {
        this.root = root;
    }
}

主要类别:

public class Main {
    public static void main(String[] args) {
        BinTreeGen<Object> btg = new BinTreeGen<>(); //Bound mismatch: The type Object is not a valid substitute for the bounded parameter <E extends Comparable<E>> of the type
    }
}

解决这个问题的正确方法是什么?我是否应该创建一个没有可比较的二叉树,但是如何在二叉树上移动,或者创建binarytreegen对象的正确方法是什么?

k10s72fa

k10s72fa1#

你面临的根本问题是:
二叉树需要甲骨文。这个预言有以下功能:给定树中存在的或正在添加到树中的任意两个对象,哪一个在另一个之前?哪个比较低?
没有这个Oracle,你就不能建立一个二叉树。
想象一下我让你把一堆弹珠放在一棵二叉树上。我把弹珠递给你,你应该称一下弹珠的重量。然而,你没有一个精确的刻度,任何两个弹珠之间的重量差异是真实的,但很小。
你不能做要求你做的工作。这是不可能的。
同样的道理也适用于这里:代码 BinTreeGen 完全不知道它怎么可能“称”一个物体。它不知道如何从任何给定的本身是“有序”的对象(如单个数字)派生属性,或者如何从给定的两个对象中确定哪个对象是“较低”的。
关键是 E extends Comparable<E> 你想存储在二叉树中的东西保证是“自序的”:是一种类型的对象,保证让你调用它 a.compareTo(b) ,在哪里 a 以及 b 是树中存储的任何对象,此方法都存在并给出合理的答案:如果“a”较低,则为负数;如果“b”较低,则为正数;如果a和b实际上是同一个对象,则为0。
那么,解决办法就是用一些东西来代替 Object (英寸 BinTreeGen<Object> )这是内在有序的。定义:实现 Comparable<X> 其中x是它自己。
例如: java.lang.Integer java.lang.String java.lang.BigDecimal 如果没有这一点,问“我怎么做这个工作”就有点像问“我怎么找到一个圆的角”或者“我怎么比光速快”或者“我怎么让1+1等于3”。你在要求不可能的事。

相关问题