JAVA 泛型机制原理,泛型擦除机制
-
泛型的原理:
Java泛型是jdk5引入的一种机制。为了向下兼容,所以Java虚拟机是不支持泛型的,也就是说Java泛型是一种伪泛型机制。 -
泛型的擦除机制:
伪泛型机制就是说:在编译期间把泛型的信息全部擦除掉了,所以的泛型最终都变成了最原始的类型(Object);在运行期就不存在泛型的信息。 -
编译器怎么擦除泛型的?
- 检查泛型的类型,获取目标泛型
- 擦除类型变量,并替换为限定类型
a. 如果没有指定类型变量(),则用Object为原始类型
b.如果限定类型变量(),则用A作为原始类型
c.如果有多个限定类型(<T extends A & B & C >),则用第一个边界A作为原始类型 - 必要时插入类型转换以保持类型安全
- 生成桥方法用在扩展的时候保持多态性
-
泛型的副作用?
- 使用泛型后,不能使用基本数据类型(byte,short,int ,long,float,double,boolean,char);
a. 原因:因为擦除后变成Object,而Object无法存放int类型 - 不能使用 instanceof运算符
a. 原因:因为擦除后只剩下原始类型,泛型信息不存在。 - 泛型在静态方法和静态类使用问题
a. 泛型静态参数创建时候报错:泛型的静态参数在创建的时候就要确定参数
b.泛型静态方法创建成功:方法在调用的时候在确定泛型类型 - 泛型类型中方法冲突
a.比如equals方法:泛型擦除后变成了Object,object方法有equals方法,相当于重新定义equals方法
- 使用泛型后,不能使用基本数据类型(byte,short,int ,long,float,double,boolean,char);
题外话:谢谢大家观看,有不足之处欢迎大家一起讨论;码字不易,大家喜欢,麻烦点赞哦。
灵魂三问:
- 有没有觉得技术得不到系统的提升,技术成长慢?
- 有没面试懵逼,升职加薪难?
- 有没有想过去大一点的世界看看?
有期望JAVA技术巩固的、Android知识进阶的、期望升职加薪的、Android面试技巧的、大厂面试真题的;大家可以加我QQ哦:1070800492。我们一起学习,一起进步!
重要的事情说三遍:
- 学习、挣钱、自由
- 学习、挣钱、自由
- 学习、挣钱、自由
疫情当下,唯有自强