两分钟搞懂泛型和泛型擦除
首先,我们要先理解什么是泛型
泛型是JDK5引入的一种机制,它主要作用于编译阶段约束集合或者类,接口,方法的元素类型。
其主要作用是为了避免在运行阶段的类型转换异常,同时提高代码的复用性。
(一句话,就是编译阶段起作用,影响到运行阶段)
三大作用:
- 类型安全:将运行阶段的错误提前到编译阶段。
- 代码重用:一次定义到处使用。
- 消除强转:使代码更加优雅
其次,我们来解释为什么会发生泛型的类型擦除
泛型擦除是发生在编译阶段,编译完成后,字节码中会移除泛型的类型信息参数。
本质上,类型擦除是一种对JDK5以前老代码的兼容妥协。
同时泛型不能使用基本数据类型,因为在运行阶段会转为Object类型,如果使用基本数据类型会报错。
代码中的T extends T和T super T是什么意思?
PECS:Producer Extands Consumer Super
Producer Extands:生产者使用Extands,Extands代表上界,主要用来读数据。
Consumer Super:消费者使用Super,Extands代表下界,主要用来写数据。
(读用extends,写用super)
面试题来了:
1. Java泛型的作用是什么?
它是一种在编译阶段进行类型检查和约束的机制。
主要由三大好处:
- 类型安全:将运行阶段的错误提前到编译阶段。
- 代码重用:一次定义到处使用。
- 消除强转:使代码更加优雅
2.什么是类型擦除?
Java泛型值存在于编译器,在运行时JVM拿不到泛型的信息,这个过程就是叫做类型擦除。
核心作用就是为了向老版本代码进行兼容妥协(JDK5以前)
extends和super的区别和使用场景?
这两个是泛型的边界通配符(PESC原则)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Chu_Yu-blog!







