Java:泛型体系

(PPT来源:bilibili网站-黑马程序员)

泛型

泛型之前,可以构造元素类型为 Object 集合来存储任意数据类型的对象;但该集合的使用中,如果不能一一明确每一个元素的数据类型,在运行时容易发生ClassCastException异常;且对所有元素不能统一处理。

泛型优点:
提供了编译时类型安全监测机制,编译期间检查非法类型数据结构
减少后续操作数据时的数据类型转换

在这里插入图片描述
同一泛型类,根据不同的数据类型创建的对象,本质上是同一类型
在这里插入图片描述

泛型类派生子类

在这里插入图片描述
子类只要有父类的泛型标识即可,在此基础上还可以进行泛型扩展(类中还需要其他的数据类型)
在这里插入图片描述
子类不是泛型类时,可以当作普通类来处理

泛型接口

在这里插入图片描述
在这里插入图片描述
eg:
public class Apple implements Eat < String > {…}
public class Apple < T > implements Eat < T > {…}

泛型方法

在这里插入图片描述
在这里插入图片描述
定义泛型方法
在这里插入图片描述
test:创建一个泛型类,在泛型类中调用了泛型方法
泛型方法的数据类型独立于泛型类,即可以和泛型类的数据类型不一致,泛型方法更加灵活
在这里插入图片描述
普通成员方法,在采用了类的泛型标识后,则不能被声明为静态方法
但泛型方法支持静态

泛型方法与可变参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类型通配符

在这里插入图片描述
Box 泛型类设置好后,使用时定义了 Number 数据类型,所以只接Number,不接收 Integer 等其他类型,此处是泛型,不能采用多态思想觉得写父类子类都可以用
(再次强调:虽然泛型类中泛型类型可以不同,但本质上泛型类都是同一类型,即泛型类名字的这个类型)
在这里插入图片描述
所以想要接收多种数据类型,可以将< >中写成< ? >表示接收多种数据类型
在这里插入图片描述

类型通配符的上限

在这里插入图片描述
此时可以接收 Number 类型 以及 Number 类型的子类
在这里插入图片描述
eg:
在这里插入图片描述
上限通配符只能用于创建对象时对传入的数据类型进行约束,但不能用于直接添加新元素:
在这里插入图片描述

类型通配符的下限

在这里插入图片描述
在这里插入图片描述
下限通配符可以进行元素添加,但不保证元素的约束要求,所以需要用Object 数据类型来接收:
在这里插入图片描述

类型擦除

在这里插入图片描述
编译完成后,泛型信息都被擦除掉了,本质上都是泛型类名的那个类型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
类型擦除后的方法与多态发生了冲突时,编译器采用桥接方法擦除类型
在这里插入图片描述

泛型数组

在这里插入图片描述
创建好带泛型的类,将普通类的值导入到泛型类中:
但如果不小心,容易发生ClassCastException
在这里插入图片描述
最优做法:直接将普通类的匿名对象赋给泛型数组的引用
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值