java learn 泛型通配符

java learn 泛型通配符,第1张

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
如果希望,又能插入,又能取出,就不要用通配符?

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5434913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存