博为峰Java技术题 ——JavaSE 泛型Ⅲ

博为峰小博老师:安全

[使用类型通配符]3d

List<Object>不是List<String>的父类型,List<Integer>不是List<Number>的父类型,试图用如下方式赋值是不容许的:code

第5行将报错”Type mismatch: cannot convert from List<Integer> to List<Number>”。有人可能以为这样很不方便:我在一个方法里面只须要循环检索一个List,也不能利用多态放一个父类型进去,也不能重载,那怎么办呢?针对这个问题,Java给开发者提供了通配符”?”,看一下:blog

<?>是类型通配符,表示是任何泛型的父类型,这样List<Object>、List<String>这些均可以传递进入printList方法中,注意这里的参数不能写成List<E>,这样就报错了,E未定义。固然<?>也能够不加,不过这样会有警告:若是传递一个List<E>给List,至关于传递一个只承诺将它看成List(原始类型)的方法,这将会破坏使用泛型的类型安全。ip

再注意一点,使用类型通配符,只能从中检索元素,不能添加元素。开发

相关文章
相关标签/搜索