2

我想将一些ArrayList<Integer>X传递a(Collection<Integer> someCol)Collection<Integer>作为输入的方法。

我怎样才能做到这一点?我认为 ArrayList 是一个 Collection ,因此我应该能够“做到这一点”,但似乎 Collection 是一个接口,而 ArrayList 实现了这个接口。我能做些什么来完成这项工作......如果你理解这个理论,这也将帮助我,可能还有很多其他人。

谢谢

4

2 回答 2

10

去做就对了。

严肃地说,一个类将隐式转换为它实现的接口。

编辑
如果您需要一个示例:

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);
    }
}
于 2010-05-06T05:16:47.387 回答
4

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[]

参考

相关问题

于 2010-05-06T05:23:20.610 回答