如何在java中扩展具有附加约束的泛型类?

时间:2012-02-06 16:50:48

标签: java generics inheritance

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

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.java:1: type parameter T is not within its bound
public class BinaryTreeInt<T extends Integer> extends BinaryTree<T>
                                                                 ^
1 error

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

2 个答案:

答案 0 :(得分:2)

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

public class BinaryTreeInt extends BinaryTree<Integer>

但是类型暗示它是int而不是Integer

答案 1 :(得分:1)

问题源于以下潜在的类:

class FunnyNumber extends Integer { }

此课程不会展开Comparable<T>,因此不能将其用作T基础。
换句话说,extends Comparable<Integer>extends Comparable<T>不同。

你的第二堂课不应该是通用的。
如果要更改类型参数,则只应使用泛型 在这里,您需要一个固定类型,因此您应该创建一个扩展BinaryTree<Integer>的普通非泛型类。 (或者直接使用BinaryTree<Integer>,不要单独创建一个类)