Java泛型绑定不匹配:类型对象不是绑定参数的有效替代品<;E可比<;E>&燃气轮机;
我正在尝试创建一个通用的二叉树,二叉树的节点将由对象组成。为了插入和移动二叉树,我使用了可比较的接口,但问题是我无法创建二叉树对象并生成类型为“Object”的泛型 二叉树:Java泛型绑定不匹配:类型对象不是绑定参数的有效替代品<;E可比<;E>&燃气轮机;,java,generics,Java,Generics,我正在尝试创建一个通用的二叉树,二叉树的节点将由对象组成。为了插入和移动二叉树,我使用了可比较的接口,但问题是我无法创建二叉树对象并生成类型为“Object”的泛型 二叉树: public class BinTreeGen<E extends Comparable<E>> implements BinTreeGenInterface<E> { private BinNodeGen<E> root = null; BinTreeGe
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类BinTreeGen实现bintreegenterface{
私有BinNodeGen root=null;
宾特列根(){
root=null;
}
BinTreeGen(BinNodeGen根){
this.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
}
}
公共类主{
公共静态void main(字符串[]args){
BinTreeGen btg=new BinTreeGen();//绑定不匹配:类型对象不是类型的绑定参数的有效替代物
}
}
解决这个问题的正确方法是什么?我是否应该创建一个没有可比较对象的二叉树,但如何在二叉树上移动,或者创建BinaryTreeGen对象的正确方法是什么?您遇到的基本问题是: 二叉树需要oracle。此oracle具有以下功能:给定树中存在的或正在添加到树中的任意两个对象,哪个在另一个之前?哪一个较低 没有这个甲骨文,你就无法生成二叉树 想象一下,我让你把一堆大理石放在一棵二叉树上。我把弹珠递给你,你应该称一下弹珠的重量。然而,你没有一个精确的刻度,任何两个弹珠之间的重量差都是真实的,只是一分钟 你不能做要求你做的工作。这是不可能的 这一点在这里也同样适用:BinTreeGen的代码绝对不知道它如何“称量”一个物体。它不知道如何从自身“有序”(如单个数字)的任何给定对象派生属性,也不知道如何从给定的两个对象派生属性来确定哪一个“较低”
E扩展可比较的
的要点是,您要存储在二叉树中的东西保证是“自序的”:是保证允许您调用a.compareTo(b)
的类型的对象,其中a
和b
是树中存储的任何对象,这个方法既存在又给出了合理的答案:如果“A”较低,则为负数;如果“b”较低,则为正数;如果A和b实际上是同一个对象,则为0
因此,解决方法是使用某种东西,而不是对象(在BinTreeGen
中),后者本质上是有序的。定义如下:它实现了可比
,其中X本身就是X
例如:
java.lang.Integer
java.lang.String
java.lang.BigDecimal
如果没有这一点,问“我如何使这项工作”就有点像问:“我如何找到一个圆的角”或“我如何比光速快”或“我如何使1+1等于3”。你是在要求不可能的东西。你想在btg中存储什么特定类型的对象?您不能存储泛型对象
因为对象
未实现可比
,但如果您选择更具体的对象,如字符串
或整型
,它将起作用。我创建了一个类Person,用于存储此人的姓名和年龄,并希望在二进制树中使用该类Person。如果没有可比性,可以创建二进制树,但我不知道如何在二进制树周围移动,然后使其成为BinTreeGen btg
。同样的错误。。。但我相信我发现了我的错误。我不想创建Person类型的二叉树,而是创建节点。所以这应该行得通。但是感谢您抽出时间,一般来说,您确实希望使二叉树类型与其节点类型相同;您不希望最大化“n”个匹配类型