![](/img/trans.png)
[英]An instantiable Java generic for <E extends Comparable<E>>
[英]How to extend Generic abstract Class with <E extends Comparable<E>>
我正在尝试使一个抽象类AbstractBinSearchTree
像这样:
public abstract class AbstractBinSearchTree<E extends Comparable<E>>
{
public abstract void add(E element);
public abstract void add(Collection<E> elemente);
public List<E> retrieveInOrder(Pos<E> p) {
...
}
我的问题现在是如何从此类扩展。 我想制作一个ArrayBinTreeSearch
,可以像这样实例化:
AbstractBinSearchTree<Elem> tree = new ArrayBinSearchTree<Elem>();
我尝试了这个:
public class ArrayBinSearchTree<E extends Comparable<? super E>> extends AbstractBinSearchTree<Comparable<E>>{
Comparable<E>[] _tree;
public ArrayBinSearchTree(int size)
{
_tree = new Comparable[size];
}
@SuppressWarnings("unchecked")
@Override
public void add(Comparable<?> element) {
...
}
但是我并不真的觉得这是使用它的正确方法。 同样,我无法像上面提到的那样实例化。
我相信您需要替换以下行:
public class ArrayBinSearchTree<E extends Comparable<? super E>> extends AbstractBinSearchTree<Comparable<E>>{
附:
public class ArrayBinSearchTree<E extends Comparable<? super E>> extends AbstractBinSearchTree<E>{
否则,您将限制AbstractBinSearchTree
中任何方法的参数。 此外,按如下所示扩展AbstractBinSearchTree
的通用类型:
public abstract class AbstractBinSearchTree<E extends Comparable<? super E>>
另外,您的ArrayBinSearchTree构造函数具有一个int
参数:
AbstractBinSearchTree<Elem> tree = new ArrayBinSearchTree<Elem>(5);
并且可以用菱形语法代替:
AbstractBinSearchTree<Elem> tree = new ArrayBinSearchTree<>(5);
假设您使用的是Java 7或更高版本
与它的界面相当,然后必须将“扩展”更改为“实现”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.