1、? extends 类名
这种通配符 指的是该类的子类泛型的某一个 也是意在表达这个容器类装的那些类的对象数据
代码示例:(由集合中的泛型示例)
ArrayLister=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类
ArrayLister=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
如果希望,又能插入,又能取出,就不要用通配符?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)