泛型只支持引用数据类型
引例:
当ArrayList没有泛型时,所有对象默认是Object类
没有泛型时,利用多态(object),可以存储任意数据类型的对象.
多态的弊端:不能访问子类的特有功能!!!如果我传入的是字符串,无法调用字符串的.length等功能
如果考虑将object强转,当传入多个对象时,不知道该强转哪个。
泛型的好处:数据类型统一,避免强转异常
泛型为什么不能接收基本数据类型?
Java的泛型是伪泛型,在编译时判断是不是定义泛型的数据结构,但真正执行时,又会将所有对象变为object类(泛型的擦除),所以对象不能是基本数据类型,因为无法转成object类型。
泛型的细节
泛型类:定义在类后面
1、一个类中,某个变量数据类型不确定时,可以定义泛型类
例子:
泛型方法:方法中形参不确定,可以使用类名后面定义泛型<E>,或者下图方法(针对某一个方法形参的泛型)
例子1:
例子2:创建对象必须给出明确数据类型,其泛型数据类型,在方法被调用时即被确定
补充:添加的数据无限制:E...e
与类泛型区别:
泛型接口:两种情况
1、实现类明确数据类型时,接口泛型直接确立确立,实现类无需定义数据类型,如下图:
2、实现类也不知道数据类型时:创建实现类时,必须给出数据类型(与泛型类似)
泛型通配符:限定类型的范围
为什么要有这个?
泛型不具有继承性,而数据具有继承性,如下:
但是,如果要是利用泛型方法的话,会导致所有类都可以调用这个方法,如下,这个student和我们的其他类没有任何关系,我们不想这样
所以我们希望:所以有了通配符,及两种格式
应用场景:确定传递某个继承体系的时候