在课堂上,我有一个容器:
public class MyClass implements MyClassInterface {
private LinkedList<OtherClass> list; //Need to use 'OtherClass' instead of 'OtherClassInterface here
@Override
public Iterator iterator() {
return list.iterator; //Problem!
}
}
界面:
public interface MyClassInterface {
//Is
public Iterator iterator();
//Should be
public Iterator<OtherClassInterface>();
}
话又说回来,OtherClass
也有一个界面OtherClassInterface
。我只希望使用代码的人使用接口。问题是我想使用完整的OtherClass
内部MyClass
但将迭代器传递LinkedList<OtherClassInterface>
给MyClassInterface.iterator()
.
我无法将现有内容LinkedList<OtherClass>
转换为LinkedList<OtherClassInterface>
内部MyClass
以返回所需的迭代器。
如何处理这样的情况?
编辑
我想要这种行为的原因
对于另一位开发人员,我想提供两个接口:第一个让他可以访问更高的数据结构,其中包含他应该通过第二个接口访问的更低的数据结构。在上层接口的实现类中,我直接使用下层数据结构的类型,而不是通过下层接口。
如前所述,其他开发人员希望同时使用这两个接口。在较高的接口上,我想提供一个迭代器,它可以访问较低接口的元素,但不能访问实现该接口的类。
额外需求
我还希望返回的迭代器是“Iterable”,即我可以使用“for each”构造。*waxwing*s 解决方案也可以做到这一点吗?如果可能的话,我不想实现一个自己的迭代器——对我来说这似乎没有必要,因为我只想给接口的元素而不是实现类提供一个迭代器。