如何在java中使用添加的约束扩展泛型类?

如何在java中使用添加的约束扩展泛型类?,java,generics,inheritance,Java,Generics,Inheritance,我想扩展我的BinaryTree类,以便只接受整数参数,并且可以重用代码 public class BinaryTree<T extends Comparable<T>> {/*code omitted for convenience*/} public class BinaryTreeInt<T extends Integer> extends BinaryTree<T> {/*code omitted for convenience

我想扩展我的BinaryTree类,以便只接受整数参数,并且可以重用代码

public class BinaryTree<T extends Comparable<T>>  
{/*code omitted for convenience*/}  
public class BinaryTreeInt<T extends Integer> extends BinaryTree<T>  
{/*code omitted for convenience*/}
公共类二进制树
{/*为方便起见省略了代码*/}
公共类BinaryTreeInt扩展了BinaryTree
{/*为方便起见省略了代码*/}
我在编译时遇到以下错误-

BinaryTreeInt.java:1: type parameter T is not within its bound
public class BinaryTreeInt<T extends Integer> extends BinaryTree<T>
                                                                 ^
1 error
BinaryTreeInt.java:1:type参数T不在其范围内
公共类BinaryTreeInt扩展了BinaryTree
^
1错误

有人能指导如何为这种继承编写代码吗?

整数是最终的,所以您所拥有的是

public class BinaryTreeInt extends BinaryTree<Integer>
public类BinaryTree扩展了BinaryTree

但是,类型意味着它是
int
而不是
Integer

Integer是final,因此您拥有的是

public class BinaryTreeInt extends BinaryTree<Integer>
public类BinaryTree扩展了BinaryTree

但是,该类型意味着它是
int
而不是
Integer

问题源于以下潜在类别:

class FunnyNumber extends Integer { }
此类不扩展
Comparable
,因此不能用作基础
t

换句话说,
扩展可比性
扩展可比性
不同

您的第二个类不应该是泛型的。
如果要更改类型参数,则只能使用泛型。

在这里,您需要一个固定类型,因此应该创建一个扩展
BinaryTree
的普通非泛型类。(或者直接使用
BinaryTree
,根本不创建单独的类)

问题源于以下潜在类:

class FunnyNumber extends Integer { }
此类不扩展
Comparable
,因此不能用作基础
t

换句话说,
扩展可比性
扩展可比性
不同

您的第二个类不应该是泛型的。
如果要更改类型参数,则只能使用泛型。

在这里,您需要一个固定类型,因此应该创建一个扩展
BinaryTree
的普通非泛型类。(或者直接使用
BinaryTree
,根本不创建单独的类)

为什么第二个类是泛型的?你确定吗?Integer是最后一个类,所以它没有意义为什么第二个类是泛型的?你确定吗?Integer是最后一个类,因此它没有意义,但是,为什么问题中的代码会出现编译错误?我认为这是因为T无法扩展Integer,因此无法实现Comparable。@user877856:no;这不是原因。这是因为
T
不受扩展
Comparable
的限制。请看我的答案。是的,但是,为什么问题中的代码会出现编译错误?我认为这是因为T不能扩展整数,因此无法实现可比性。@user877856:No;这不是原因。这是因为
T
不受扩展
Comparable
的限制。看我的答案。我一定是遗漏了一些明显的东西,但我不明白你说的。您发布的代码没有意义,无法编译。@Pablo:忽略
Integer
是密封的这一事实,这个类是派生的
t
不满足基本约束的示例。好的,我想您是想编写FunnyNumber扩展Integer。现在我明白了,可比a;可比b;a=b;不会编译。我一定是遗漏了一些明显的东西,但我不明白你说的。您发布的代码没有意义,无法编译。@Pablo:忽略
Integer
是密封的这一事实,这个类是派生的
t
不满足基本约束的示例。好的,我想您是想编写FunnyNumber扩展Integer。现在我明白了,可比a;可比b;a=b;不会编译。