博为峰Java技术题 ——JavaSE 泛型Ⅲ
博为峰Java技术题 ——JavaSE 泛型Ⅲ
博为峰教研组 发表于1年前
博为峰Java技术题 ——JavaSE 泛型Ⅲ
  • 发表于 1年前
  • 阅读 8
  • 收藏 1
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

博为峰小博老师:

[使用类型通配符]

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(原始类型)的方法,这将会破坏使用泛型的类型安全。

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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 49
博文 1224
码字总数 479077
×
博为峰教研组
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: