java中的泛型记录
一、Java中<? extends T>和<? super T>的理解
感谢总结者:参考地址https://www.cnblogs.com/chenxibobo/p/9655236.html
总结如下:
<? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类;
<? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object;
上界
<? extends T>
不能往里存,只能往外取,虽然不能使用add方法,但是可以在初始化的时候一个son指定不同的类型。比如:
List<? extends Father> list1 = getFatherList();//getFatherList方法会返回一个Father的子类的list
List<?>
单纯的就表示:集合里放了一个东西,是什么我不知道。
下界
<? super Father>只能添加Father和Father的子类,不能添加Father的父类,读取出来的东西只能存放在Object类里
结论:
1、extends 可用于返回类型限定,不能用于参数类型限定
(? extends xxx 只能用于方法返回类型限定,jdk能够确定此类的最小继承边界为xxx,只要是这个类的父类都能接收,但是传入参数无法确定具体类型,只能接受null的传入)。
2、super 可用于参数类型限定,不能用于返回类型限定
(? supper xxx 只能用于方法传参,因为jdk能够确定传入为xxx的子类,返回只能用Object类接收)。
3、? 既不能用于方法参数传入,也不能用于方法返回。