首先,我们要先理解什么是泛型

泛型是JDK5引入的一种机制,它主要作用于编译阶段约束集合或者,接口,方法的元素类型
其主要作用是为了避免在运行阶段的类型转换异常,同时提高代码的复用性。
(一句话,就是编译阶段起作用,影响到运行阶段)
三大作用:

  • 类型安全:将运行阶段的错误提前到编译阶段。
  • 代码重用:一次定义到处使用。
  • 消除强转:使代码更加优雅

其次,我们来解释为什么会发生泛型的类型擦除

泛型擦除是发生在编译阶段,编译完成后,字节码中会移除泛型的类型信息参数。
本质上,类型擦除是一种对JDK5以前老代码的兼容妥协。
同时泛型不能使用基本数据类型,因为在运行阶段会转为Object类型,如果使用基本数据类型会报错。

代码中的T extends TT 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原则)