使用接口实现时的“不可转换类型”

时间:2013-03-05 15:49:56

标签: java interface

在尝试将接口的实现强制转换为接口时,我遇到了意外错误(“不可转换的类型”)。

我给了以下界面

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接口的方法?

1 个答案:

答案 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

的精彩教程