栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java learn 泛型通配符

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java learn 泛型通配符

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

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

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

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

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

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

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

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

3、泛型通配符?

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

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

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459400.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号