Java -- 泛型 泛型擦除 泛型补偿

泛型

一、理论基础

概念:

jdk1.5出现的安全机制;

 

编译时:泛型技术是给编译器使用的技术,确保类型安全。

运行时:会将泛型去掉,生成的class文件时不带泛型的-- 成为泛型擦除

 

(1)为什么会擦除?

为了兼容运行的类加载器,(jdk1.5之后引入了泛型,但与之对应的运行的类加载器没有升级)

当然,并不是每一个泛型参数被擦除类型后都会变成 Object 类。对于限定了继承类的泛型参数,经过类型擦除后,所有的泛型参数都将变成所限定的继承类。也就是说,Java 编译器将选取该泛型所能指代的所有类中层次最高的那个,作为替换泛型的类。

 

(2)什么是泛型补偿/转换?

在运行时,通过获取元素的类型进行转换的工作,无需使用者再强制转换。

(编译器只做检查,编译后类型被擦除,所以泛型内部存的还是Object, 为了避免强转,在类加载器基础上引入补偿机制,根据指定的元素类型,对其进行一次转换。)

 

好处:

  1. 将运行时期的问题classCastException转到了编译时期。
  2. 避免了强制转换的麻烦

 

既然泛型会被类型擦除,那么我们还有必要用它吗?

我认为

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值