我想将一些ArrayList<Integer>
X传递给以a(Collection<Integer> someCol)
作为输入的方法Collection<Integer>
。
我该怎么做?我认为ArrayList是一个集合,因此我应该能够“只做它”但似乎Collection是一个接口,而ArrayList实现了这个接口。我能做些什么来使这项工作......如果你理解这个理论对我和其他许多人都有帮助。
由于
答案 0 :(得分:9)
做吧。
说真的,一个类会隐式地转换为它实现的接口。
编辑
如果您需要一个例子:
import java.util.*;
public class Sandbox {
public static void main(String[] args) {
final ArrayList<Integer> list = new ArrayList<Integer>(5);
Collections.addAll(list, 1, 2, 3, 4, 5);
printAll(list);
}
private static void printAll(Collection<Integer> collection) {
for (Integer num : collection)
System.out.println(num);
}
}
答案 1 :(得分:4)
class ArrayList<E> implements List<E>
和interface List<E> extends Collection<E>
,因此ArrayList<Integer>
是-Collection<Integer>
。
这就是所谓的“子类型”。
但请注意,即使Integer extends Number
,List<Integer>
也不是List<Number>
。但是,它是List<? extends Number>
。也就是说,Java中的泛型是不变的;它不是协变的。
阵列是协变的。 Integer[]
是一个Number[]
。