java泛型使用笔记

一、java泛型

1. ?extends

  • ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型
    • heroList 的泛型可能是Hero
    • heroList 的泛型可能是APHero
    • heroList 的泛型可能是ADHero
  • 从heroList取出来的对象,一定是可以转型成Hero的。
  • 不能往heroList中放东西,只能取。
  • 只能取,那么问题来了,哪来的数呢?遍历已经初始化的集合,以参数的形式传入函数中。在这里插入图片描述
ArrayList<APHero> apHeroList = new ArrayList<APHero>();
apHeroList.add(new APHero());
ArrayList<? extends Hero> heroList = apHeroList;

2. ? super

  • ArrayList heroList<? super Hero> 表示这是一个Hero泛型或者其父类泛型
    heroList的泛型可能是Hero
    heroList的泛型可能是Object
  • 可以往里面插入Hero以及Hero的子类
  • 取出来有风险,因为不确定取出来是Hero还是Object在这里插入图片描述
ArrayList<? super Hero> heroList = new ArrayList<Object>();                 
heroList.add(new Hero());    
heroList.add(new APHero());        
heroList.add(new ADHero());                  
//但是,不能从里面取数据出来,因为其泛型可能是Object,而Object是强转Hero会失败        
Hero h= heroList.get(0);

3.泛型通配符?

泛型通配符? 代表任意泛型
既然?代表任意泛型,那么换句话说,这个容器什么泛型都有可能
所以只能以Object的形式取出来
并且不能往里面放对象,因为不知道到底是一个什么泛型的容器
在这里插入图片描述

4.总结

如果希望只取出,不插入,就使用? extends Hero
如果希望只插入,不取出,就使用? super Hero
如果希望,又能插入,又能取出,就不要用通配符?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值