2017-05-08 120 views
2

如何在Java中正确编写以下类声明?Java - 具有通用参数的泛型类参数

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

基本上,我试图创建任何T类继承一个可比的数据类型电子商务BinarySearchNode的BinarySearchTree(和我BinarySearchTree也应该是可迭代)。

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

+1

为什么此事件将* node type *而不是* element type *作为类型参数? – user2357112

+0

因为我想让扩展BinarySearchTree的类能够用扩展它的不同类来替换BinarySearchNode。 例如 - AVLTree将扩展BinarySearchTree并使用AVLNode而不是BinarySearchNode – RazK

+0

很明显,我不希望任何人给我类实现, 如果你仔细阅读我的问题,你会明白我只寻找正确的方式来写我上面张贴的行。 – RazK

回答

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

类型参数E.需要从节点类型单独定义,即使它结束了冗余寻找:BinarySearchTree<BinarySearchNode<String>, String>。 Java不会让你直接访问泛型类型的泛型参数。

另外,请注意,即使使用接口,通用参数也总是使用“扩展”。

0

随着Java中的泛型,您将只能使用extends。所以,基本上你的方法装饰将成为:

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

即使对于那些实现接口的类,泛型将使用extends。泛型的唯一其他语法是super如果您正在查看来自相反方向的继承

+2

这不会编译。您不能在泛型定义中嵌套泛型的扩展,即您不能有'A类