我想将一些ArrayList<Integer>
X传递a(Collection<Integer> someCol)
给Collection<Integer>
作为输入的方法。
我怎样才能做到这一点?我认为 ArrayList 是一个 Collection ,因此我应该能够“做到这一点”,但似乎 Collection 是一个接口,而 ArrayList 实现了这个接口。我能做些什么来完成这项工作......如果你理解这个理论,这也将帮助我,可能还有很多其他人。
谢谢
我想将一些ArrayList<Integer>
X传递a(Collection<Integer> someCol)
给Collection<Integer>
作为输入的方法。
我怎样才能做到这一点?我认为 ArrayList 是一个 Collection ,因此我应该能够“做到这一点”,但似乎 Collection 是一个接口,而 ArrayList 实现了这个接口。我能做些什么来完成这项工作......如果你理解这个理论,这也将帮助我,可能还有很多其他人。
谢谢
去做就对了。
严肃地说,一个类将隐式转换为它实现的接口。
编辑
如果您需要一个示例:
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);
}
}
class ArrayList<E> implements List<E>
和interface List<E> extends Collection<E>
,所以一个ArrayList<Integer>
is-a Collection<Integer>
。
这就是所谓的“子类型化”。
但是请注意,即使Integer extends Number
, a List<Integer>
is-not-a List<Number>
。然而,它是一个List<? extends Number>
. 也就是说,Java 中的泛型是不变的;它不是协变的。
另一方面,数组是协变的。一个Integer[]
is-a Number[]
。