是否可以在java中实现ListIterator和Collection?

时间:2016-04-28 13:41:38

标签: java interface

所以我有一个我想要能够排序的课程。为此,我只是让它实现了集合接口,因此可以在Collections类中使用它。

现在我已经注意到类本身只是一个跳跃,跳过,并且远离ListIterator并且它也很好地实现了该接口(展望未来)。但是有一个问题,那就是Collection接口和ListIterator接口之间存在方法冲突:

// from the Collection interface:
public boolean add(E someElement);

// from the ListIterator interface:
public void add(E someElement);

是否可以让一个类符合这两个接口?如果不是,这是否意味着这两个接口是互斥的?

3 个答案:

答案 0 :(得分:5)

是的,不幸的是,它们是相互排斥的。

当您创建一个试图同时实现这两者的(抽象)类时,您将收到编译器错误。

  

Main.java:16:错误:类型ListIterator和Collection不兼容;两者都定义了add(java.lang.Object),但是具有不相关的返回类型
  抽象类Foo实现Collection,ListIterator

答案 1 :(得分:4)

你是对的,你不能同时实现这两者。但说实话,你为什么要这样做?

如果您需要公开ListIterator,为什么不添加返回方法?

扩展List

Collection并不扩展ListIterator,它有一个名为listIterator的方法,它返回迭代器。

ListIterator<E> listIterator();

请注意,Collection不是IteratorCollectionIterable

答案 2 :(得分:0)

正如其他人所说,不可能同时在一个班级。

ListIterator的语义为Iterator,但仍然禁止这样做:Collection是您可以根据需要迭代的事情,而Iterator这是一次性的事情,一旦你迭代它,就可以被丢弃(或者,在ListIterator的情况下,可能会倒带和重复使用,但这不是标准的用例)。