我试图将一个类的迭代器转换为所述类的子类的迭代器。这给了我一个“不可转换的类型”错误。为什么这是不可能的,最优雅的解决方法是什么?(或者,如果是这样,为什么这是一个坏主意?)
在这种情况下,使用 for-each 循环不是解决方案:我正在尝试实现iterator()
,最简单的方法是返回iterator()
我的班级之一的字段,但那个没有确切要求类型。我也不能更改我的签名iterator()
。
public interface SomeoneElsesInterface {
public Iterator<SomeoneElsesInterface> iterator();
}
public abstract class MyAbstractClass implements SomeoneElsesInterface {
final MyAbstractClass[] things;
public MyAbstractClass(SomeoneElsesInterface... things) {
this.things = (MyAbstractClass[]) things;
}
}
public class MyClass extends MyAbstractClass {
public MyClass(MyAbstractClass thing1, MyAbstractClass thing2) {
super(thing1, thing2);
}
public Iterator<SomeoneElsesInterface>() {
return (Iterator<SomeoneElsesInterface>) Arrays.asList(things).iterator();
}
}
当然,我可以只更改things
. 但是,在这种情况下,我需要在其他地方进行大量演员表。我知道我的构造函数不会被非MyAbstractClass
s 的对象调用,但无论如何我都无法更改接口。