如何在java中使用添加的约束扩展泛型类?
我想扩展我的BinaryTree类,以便只接受整数参数,并且可以重用代码如何在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
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;不会编译。