Java - 具有泛型参数的泛型类参数

时间:2017-05-08 16:48:55

标签: java templates generics inheritance

如何在Java中正确编写以下类声明?

public class BinarySearchTree<T extends BinarySearchNode<E implements Comparable<E>>> implements Iterable<E>

基本上,我正在尝试创建任何类T的BinarySearchTree,它继承了Comparable数据类型E的BinarySearchNode(而我的BinarySearchTree也应该是Iterable)。

如何在Java中正确声明该类? 谢谢!

2 个答案:

答案 0 :(得分:2)

public class BinarySearchTree<T extends BinarySearchNode<E>, E extends Comparable<E>> implements Iterable<E>

类型参数E需要与节点类型分开定义,即使它最终看起来多余:BinarySearchTree<BinarySearchNode<String>, String>。 Java不允许您直接访问泛型类型的泛型参数。

另外,请注意,通用参数始终使用&#34; extends&#34;即使是接口。

答案 1 :(得分:0)

使用Java中的Generics,您只能使用extends。所以,基本上你的方法装饰会变成:

public class BinarySearchTree<T extends BinarySearchNode<E extends Comparable<E>>> extends Iterable<T>

即使是那些实现接口的类,泛型也会使用extends。如果你从相反的方向看继承,那么泛型的唯一其他语法是super