9.1.3 泛型通配符

更新于 2026年10月10日 版权声明
9.1.3 泛型通配符

在前面介绍了泛型的创建和使用,了解到如果指定了泛型的类型,那么编译器就会限制传递的类型并检查其是否合法。然而,有的时候这种限制会给开发带来一些不便。

例如,定义一个输出集合元素的print()方法,这个方法可以输出任意集合中的所有元素。由于Java中集合采用了泛型,因此print()方法无法确定集合的类型。如果为print()方法指定了具体类型,那么将无法处理所有的集合。

如:

图示

图示

上述代码中,由于将print()方法接收的集合进行了元素限定,只接受限定为Object类型的集合,即使String类型是Object的子类,也无法通过编译。编译器提示“The method print(ArrayList<Object>) in the type Demo02 is not applicable for the arguments (ArrayList<String>)”。(https://www.daowen.com)

提示:

上述代码中使用的ArrayList和Iterator相关方法参见集合、迭代器以及List接口介绍。

要解决上述问题,可以使用泛型通配符。泛型通配符用“?”表示,它可以表示一个未知的类型。因此,在不知道使用什么类型来接收数据的时候可以使用“?”通配符。

因此,Demo02.java中的print()方法可以修改为:

图示

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)