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、? 既不能用于方法参数传入,也不能用于方法返回。

原文地址:https://www.cnblogs.com/zyanrong/p/11915323.html