在尝试将接口的实现强制转换为接口时,我遇到了意外错误(“不可转换的类型”)。
我给了以下界面
public interface IAbc {...}
以及另一个类中的以下方法
public class SomeClass {
public doSomething(Iterable<IAbc> abcs) {...}
}
我写过以下课程
public class MyAbc implements IAbc {...}
我在其他地方有一个方法
public class MyClass {
public Iterable<MyAbc> getMyAbcs() {...}
}
我希望我可以很好地将它们联系起来,如下所示:
public void doSomethingWithThings(SomeClass sc, MyClass mc) {
sc.doSomething(mc.getMyAbcs());
}
但是NetBeans给了我以下错误:
错误:不可转换的类型
sc.doSomething(mc.getMyAbcs());
要求:Iterable
发现:Iterable
我尝试过投射,但Iterable<IAbc> abc = (Iterable<IAbc>)mc.getMyAbcs();
会导致相同的错误。
如何将接口的Iterable实现传递给期望Iinterrable接口的方法?
答案 0 :(得分:6)
Iterable<MyAbc>
<{1}},即使Iterable<IAbc>
是MyAbc
。
尝试使用通配符:
IAbc
这与数组相反,数组:public doSomething(Iterable<? extends IAbc> abcs) {...}
是MyAbc[]
以下是更多http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html
的精彩教程