【发布时间】:2012-07-14 16:29:04
【问题描述】:
我试图将一个类的迭代器转换为该类的子类的迭代器。这给了我一个“不可转换的类型”错误。为什么这是不可能的,最优雅的解决方法是什么? (或者,如果是这样,为什么这是一个坏主意?)
在这种情况下,使用 for-each 循环不是解决方案:我正在尝试实现 iterator(),最简单的方法是返回我的班级字段之一的 iterator(),但是那个没有确切要求的类型。我无法更改我的iterator()either 的签名。
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 的类型。但是,在这种情况下,我需要在其他地方进行大量演员表。我知道我的构造函数不会被不是MyAbstractClasss 的对象调用,但无论如何我都无法更改接口。
【问题讨论】:
-
类的类型和所包含字段的类型之间的关系是什么(如果有的话)?你能给我们看一些代码吗?
标签: java generics collections