【发布时间】:2010-11-25 08:53:50
【问题描述】:
我有各种类的接口,所有这些都应该实现Iterator,所以我有类似
public interface A extends Iterable<A> { ...otherMethods()... }
然而,对于具体的类,这意味着我必须使用
public class B implements A { public Iterator<A> iterator() {...} }
当我更喜欢(或至少,我认为我更喜欢)使用 public Iterator<B> iterator() {...} 以便类的具体使用可以具有显式类型(以防我想要不在接口中的方法时)是可用的,或者类似的。也许永远不应该出现?或者如果它出现了,那是糟糕的设计?
另一方面是使用迭代器接口
public interface A extends Iterator<A> { ...otherMethods()... }
具体的类用
编译就好了public class B implements A { public B next() {...} }
什么给了?
【问题讨论】:
-
有几个答案建议参数化 A,然后让 B 实现 A - 这很有效,我应该提到我之前已经开始工作了。问题是导致使用 AbstractClass
抽象的想法已经被打败了,或者我留下了原始类型,我吃了一堆警告,尽管我认为相对于我正在解决的问题是好吧,如果不漂亮的话。 -
所以,更具体地说,我正在寻找一个不需要子接口参数化的答案(如果存在)。
标签: java generics interface iterator iterable