博为峰Java技术题 ——JavaSE 泛型Ⅲ
2016-12-07 19:46
148 查看
博为峰小博老师:
[使用类型通配符]
List<Object>不是List<String>的父类型,List<Integer>不是List<Number>的父类型,试图用以下方式赋值是不允许的:
第5行将报错”Type mismatch: cannot convert from List<Integer> to List<Number>”。有人可能觉得这样很不方便:我在一个方法里面只需要循环检索一个List,也不能利用多态放一个父类型进去,也不能重载,那怎么办呢?针对这个问题,Java给开发者提供了通配符”?”,看一下:
<?>是类型通配符,表示是任何泛型的父类型,这样List<Object>、List<String>这些都可以传递进入printList方法中,注意这里的参数不能写成List<E>,这样就报错了,E未定义。当然<?>也可以不加,不过这样会有警告:如果传递一个List<E>给List,相当于传递一个只承诺将它当作List(原始类型)的方法,这将会破坏使用泛型的类型安全。
再注意一点,使用类型通配符,只能从中检索元素,不能添加元素。
[使用类型通配符]
List<Object>不是List<String>的父类型,List<Integer>不是List<Number>的父类型,试图用以下方式赋值是不允许的:
第5行将报错”Type mismatch: cannot convert from List<Integer> to List<Number>”。有人可能觉得这样很不方便:我在一个方法里面只需要循环检索一个List,也不能利用多态放一个父类型进去,也不能重载,那怎么办呢?针对这个问题,Java给开发者提供了通配符”?”,看一下:
<?>是类型通配符,表示是任何泛型的父类型,这样List<Object>、List<String>这些都可以传递进入printList方法中,注意这里的参数不能写成List<E>,这样就报错了,E未定义。当然<?>也可以不加,不过这样会有警告:如果传递一个List<E>给List,相当于传递一个只承诺将它当作List(原始类型)的方法,这将会破坏使用泛型的类型安全。
再注意一点,使用类型通配符,只能从中检索元素,不能添加元素。
相关文章推荐
- 博为峰Java技术题 ——JavaSE 泛型Ⅲ
- 博为峰Java技术题 ——JavaSE 泛型Ⅰ
- 博为峰Java技术题 ——JavaSE 泛型Ⅱ
- 博为峰Java技术题 ——JavaSE 泛型Ⅰ
- 博为峰Java技术题 ——JavaSE 泛型Ⅳ
- 博为峰Java技术题 ——JavaSE Java 8 新特性
- 博为峰Java技术题 ——JavaSE 重写与重载Ⅱ
- 博为峰Java技术题 ——JavaSE 创建对象Ⅰ
- 博为峰Java技术题 ——JavaSE 避免死锁Ⅰ
- 博为峰Java技术题 ——JavaSE 包(package)Ⅰ
- 博为峰Java技术题 ——JavaSE Java 方法Ⅱ
- 博为峰Java技术题 ——JavaSE Java MySQL连接
- 博为峰Java技术题-JavaSE 之关键字
- 博为峰Java技术题 ——JavaSE 日期时间Ⅱ
- 博为峰Java技术题 ——JavaSE Java NIOⅠ
- 博为峰Java技术题 ——JavaSE Java JDBC数据库查询代码实例
- 博为峰Java技术题 ——JavaSE 避免死锁Ⅱ
- 博为峰Java技术题-JavaSE 之标识符、注释
- 博为峰Java技术题 ——JavaSE 重写与重载Ⅰ
- 博为峰Java技术题 ——JavaSE 类加载器Ⅰ