参数多态论斗争

时间:2011-11-16 23:29:32

标签: java generics parametric-polymorphism

除了实施Bag&分配列表,下一步是创建一个有序版本。要求是使用正确的类型参数和约束指定参数化接口OrderedCollection。我的问题在于实施它。

接口Collection <E>存在且定义为

public interface Collection<E> extends Iterable<E>{
  public void add(E e);
  public void remove(E e);
  public boolean contains(Object e);
  public void clear();
  public int size();
  public boolean isEmpty();
  public Object[] toArray();
}

它由类

实现
public class UnorderedList<E> implements Collection<E>
public class UnorderedBag<E> extends UnorderedList<E> implements Collection<E>

我有结构工作,现在我正在尝试实现排序版本。为了做到这一点并满足部分要求,我创建了OrderedCollection作为

public interface OrderedCollection <E extends Comparable<E>> {
  public int compareTo(E e);
}

因为它正在扩展Collection中已定义的方法,所需的唯一新功能是compareTo()方法。

然而,当我尝试通过声明

实现OrderedList
public class OrderedList<E> extends UnorderedList<E> implements OrderedCollection<E>

我收到错误声明

Bound mismatch: The type E is not a valid substitute for the bounded parameter <E
extends Comparable<E>> of the type OrderedCollection<E>

据我所知,错误消息,我需要指定一个参数类型,它是接口声明中给出的参数类型的有效替代。但是,我试过了

OrderedCollection<E extends Comparable<E>>

作为implements声明者,但后来我得到一个警告,在扩展时存在语法错误。

我如何满足这里的要求?

1 个答案:

答案 0 :(得分:2)

OrderedList类的声明中,OrderedList的泛型类型需要与OrderedCollection期望的限制相匹配。

public class OrderedList<E extends Comparable<E>> 
             extends UnorderedList<E> 
             implements OrderedCollection<E>