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.
此外,正如下面的注释中所指出的,您将无法在此方法中向列表中添加对象.