Java中的接口数组

Pij*_*usn 6 java arrays interface

我有一个界面A:

interface A {
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个B级:

class B implements A {
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个使用A列表的方法:

void process(ArrayList<A> myList) {
}
Run Code Online (Sandbox Code Playgroud)

我想传递一个B列表:

ArrayList<B> items = new ArrayList<B>();
items.add(new B());
process(items);
Run Code Online (Sandbox Code Playgroud)

但是有一个类型不匹配的错误.我理解为什么.ArrayList是一类本身,它已无法正常工作,从转换ArrayList<B>ArrayList<A>.是否有一种快速且资源方面的方式来形成适合传递给我的process方法的新数组?

Sim*_*erg 10

我认为最简单的解决方案是将其中一种方法更改为:

void process(ArrayList<? extends A> myList) {
}
Run Code Online (Sandbox Code Playgroud)

但是,请注意,使用此解决方案时,整个列表必须属于同一类型.也就是说,如果你有一个C也会实现的类A,你不能混合数组中的项目,以便它的部分类型B和部分类型C.

此外,正如下面的注释中所指出的,您将无法在此方法中向列表中添加对象.