泛型的概念
通过API可以看到Collection,List,ArrayList,这几个类里面都有,这个就是泛型,里面的E可以是任何引用数据类型,使用泛型指明了数据类型之后,这个集合里面只能存储这种数据类型的对象。
不使用泛型时,要进行多次类型强制转换
使用泛型之后:
泛型的优点
可以统一集合中的数据类型,提高安全性
可以减少强制类型转换
自定义泛型
通过JDK的源码可以看到,泛型一般写的都是或者,里面的T和E就是表示使用者指定的类型。可以自己定义一个使用泛型的类
泛型通配符
在实际工作当中,有可能通过调用某个方法来接受一个返回值List的数据,这样就不太好确定返回值中的数据类型,这样可以使用泛型通配符<?>
List<?>list=newArrayList();//=号右边可能是通过调用某个方法返回的List
使用泛型通配符限定子类或者父类
? extends E
向下限定,E及其子类,可以存储当前类型的子类
? super E
向上限定,E及其父类,可以存储当前类型的父类
定义一个Student类继承Person
在List中方法addAll是限定了子类(? extends E),定义测试类: