0

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

我得到了以下界面

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<IAbc> abc = (Iterable<IAbc>)mc.getMyAbcs();导致同样的错误。

如何将接口实现的 Iterable 传递给期望接口 Iterable 的方法?

4

1 回答 1

7

Iterable<MyAbc>不是一个,即使一个。Iterable<IAbc>MyAbcIAbc

尝试像这样的通配符:

public doSomething(Iterable<? extends IAbc> abcs) {...}

这与数组相反,数组:MyAbc[]Iabc[]

这是一个很好的教程更多http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html

于 2013-03-05T15:52:40.773 回答