所以我有一个我想要能够排序的课程。为此,我只是让它实现了集合接口,因此可以在Collections类中使用它。
现在我已经注意到类本身只是一个跳跃,跳过,并且远离ListIterator并且它也很好地实现了该接口(展望未来)。但是有一个问题,那就是Collection接口和ListIterator接口之间存在方法冲突:
// from the Collection interface:
public boolean add(E someElement);
// from the ListIterator interface:
public void add(E someElement);
是否可以让一个类符合这两个接口?如果不是,这是否意味着这两个接口是互斥的?
答案 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
不是Iterator
,Collection
是Iterable
。
答案 2 :(得分:0)
正如其他人所说,不可能同时在一个班级。
但ListIterator
的语义为Iterator
,但仍然禁止这样做:Collection
是您可以根据需要迭代的事情,而Iterator
这是一次性的事情,一旦你迭代它,就可以被丢弃(或者,在ListIterator
的情况下,可能会倒带和重复使用,但这不是标准的用例)。