java learn 泛型通配符

1、? extends 类名
这种通配符 指的是该类的子类泛型的某一个 也是意在表达这个容器类装的那些类的对象数据
代码示例:(由集合中的泛型示例)

ArrayList<Hero> er=new ArrayList<>();
	
	er.add(new Hero("Hero-"));
	ArrayList<? extends Hero> sd=er;

写法如上图所示
为什么需要运用这种——ArrayList<? extends Hero> sd 我的理解是为了表示定义的容器类涵盖那些类 ,也就是定义的ArrayList< Hero > er=new ArrayList<>();把他指向ArrayList<? extends Hero> sd 用以表示

但是sd不能进行插入 因为?extends Hero 不知道是其子类还是Hero类 插入会报错 然而取出一定是可以转型成Hero类的

2、? super 类名
这种通配符 指的是该容器类的此类或此类的父类 一般会是Object类

ArrayList<Hero> er=new ArrayList<>();
	
	er.add(new Hero("Hero-"));
	
	ArrayList<?super Hero> ef=er;
	

可以插入该类或则该类的子类 但是取出来不知道是Object类 还是该类

?super 和 ?extends
这两者的区别 就如同在学习继承的时一样的思考模式
?super 表示的泛型广度 比?extends 要大 自然插入就不受限制
实质也是子父类的一个区别

3、泛型通配符?

泛型通配符? 代表任意泛型
既然?代表任意泛型,那么换句话说,这个容器什么泛型都有可能

所以只能以Object的形式取出来
并且不能往里面放对象,因为不知道到底是一个什么泛型的容器

ArrayList<APHero> apHeroList = new ArrayList<APHero>();
         
        //?泛型通配符,表示任意泛型
        ArrayList<?> generalList = apHeroList;
<?> 很形象 表示出不知道是那种泛型都有可能

这种通配符 不能插入 取只能取Object类 所有的类的父类

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值