【问题标题】:Parametric polymorphism struggles参数多态性斗争
【发布时间】:2011-11-16 23:29:32
【问题描述】:

除了为作业实施 Bag & List 之外,下一步是创建有序版本。一个要求是使用正确的类型参数和约束来指定参数化接口 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 as

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>>

作为实现声明器,但随后我收到一条警告,指出扩展中存在语法错误。

我如何满足这里的要求?

【问题讨论】:

  • 我建议尝试 public class OrderedList extends UnorderedList> 实现 OrderedCollection。 - N.b.:您确定您的收藏中有 public int compareTo(E e); 吗?该方法应该做什么?
  • 要求在哪里?什么是问题?字符串“OrderedCollection>”中没有语法错误。
  • @itun,问题出在完整的 OrderedList 类声明中,E 被声明为绑定错误,因为它不能替代 E extends Comparable 接口的参数。 John Haager 的回答帮助很大,并消除了错误。

标签: java generics parametric-polymorphism


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 1970-01-01
    • 2021-06-18
    • 2019-02-10
    • 1970-01-01
    • 2020-09-18
    • 2018-05-23
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多