Java 泛型:通配符 vs 类型参数?

9 浏览
0 Comments

Java 泛型:通配符 vs 类型参数?

我正在复习Java泛型知识。所以我去了Oracle的优秀教程……并开始为我的同事们准备一个演示。我在教程中的通配符部分看到了以下内容:

考虑下面的方法printList:

public static void printList(List list) {

...

printList的目标是打印任何类型的列表,但它未能实现这一目标——它只能打印Object实例的列表;它无法打印List、List、List等,因为它们不是List的子类型。要编写一个通用的printList方法,使用List

public static void printList(List list) {

...

我理解List不起作用;但我将代码改为

static void printObjects(List list) {

for (E e : list) {

System.out.println(e.toString());

}

}

...

List objects = Arrays.asList("1", "two");

printObjects(objects);

List integers = Arrays.asList(3, 4);

printObjects(integers);

使用List,我可以毫无问题地打印不同类型的列表。

长话短说:至少教程表明,解决这个问题需要通配符;但正如所示,也可以用这种方式解决。那么,我是错过了什么?!

(附注:在Java7中进行了测试;所以这可能是Java5、Java6的问题;但另一方面,Oracle在更新教程方面做得很好)

0