使用<item extends =“”java.lang.comparable <item =“”>&gt; </item>时绑定不匹配

时间:2014-08-04 09:29:18

标签: java generics comparable

Bound mismatch: The type Integer is not a valid substitute for the bounded parameter <Item extends Comparable<Item>> of the type BTNode<Item>

这是我收到错误的地方:

public class BinaryTree<Integer> {
  private BTNode<Integer> root;
  //...
}

这是我正在使用的课程:

public class BTNode<Item extends java.lang.Comparable<Item>> implements java.lang.Comparable<BTNode<Item>> {
  private Item data;
  //...
}

我认为Integer包装器应满足条件<xx extends Comparable<xx>>。 我的理解错了吗?你能告诉我这里我做错了什么吗?

仅供记录,我使用的是java.lang.Comparable而不是我自己的Comparable实现。

1 个答案:

答案 0 :(得分:2)

问题在于:

public class BinaryTree<Integer> {
    private BTNode<Integer> root;
}

class参数名为Integer。声明BTNode<Integer>时,您不是引用java.lang.Integer而是引用参数。

我真的不知道你要做什么,但有一条建议:最好用一个字母来命名你的类参数。例如,使用时不会发生错误:

public class BinaryTree<T> {
    private BTNode<Integer> root;
}

如果您希望root真正使用class参数,那么:

public class BinaryTree<T extends Comparable<T>> {
    private BTNode<T> root;
}

请查看以下课程:http://docs.oracle.com/javase/tutorial/extra/generics/index.html