泛型的边界

来源:互联网 发布:007网盘搜索引擎源码 编辑:程序博客网 时间:2024/04/29 04:13

1.简述

CharSequence是String的父类,但List<CharSequence>不是List<String> 的父类。同样的,Class<CharSequence>也不是Class<String>的父类。
为了反映泛型类所持有元素的继承关系,可以用到泛型的边界。
void fun(){List<String> list=new ArrayList<>();//下行会报错.CharSequence是String的父类但List<CharSequence>不是List<String> 的父类。//List<CharSequence> list1=list;//下行报错//List<? super CharSequence> list2=list;//下行不报错List<? extends CharSequence> list3=list;}
<? entends A>,可以get,可以调用A类的方法。
<? super A>,可以set。

因为擦除移除了类型信息,所以能用无界泛型参数 (即?)调用的方法只是那些可以用Object调用的方法。

泛型中的extends

它将泛型参数限制为某个类型子集,那么就可以调用该类族的一些方法。

泛型参数表中的extends

泛型类的extends

把第32行做些改变,会有如下报错:


泛型参数中的问号

0 0