一、什么是泛型?
- Java泛型是JDK 5中引⼊的⼀个新特性, 允许在定义类和接口的时候使⽤类型参数。声明的类型参数在使⽤时⽤具体的类型来替换。
- 泛型最⼤的好处是可以提⾼代码的复⽤性。以List接口为例,我们可以将String、 Integer等类型放⼊List中, 如不⽤泛型, 存放String类型要写⼀个List接口, 存放Integer要写另外⼀个List接口, 泛型可以很好的解决这个问题。
二、泛型擦除
泛型擦除是Java中的一个特性,在编译阶段将所有泛型信息擦除掉,将泛型类型变为原始类型。这是为了兼容Java的泛型与旧版本的代码。擦除后,泛型类型参数变为其上界类型或Object类型
泛型擦除的例子如下:
// 泛型类publicclassExample<T> { privateTvalue; publicExample(Tvalue) { this.value=value; } publicTgetValue() { returnvalue; } } // 使用泛型类Example<Integer>example=newExample<>(10); Integervalue=example.getValue(); // 在编译后,相当于 Integer value = (Integer) example.getValue();
在编译阶段,Example<Integer>
会被擦除为Example
,T
会被擦除为Object
。因此,在运行时,example.getValue()
的返回值会被自动转换为Integer
类型。
需要注意的是,泛型擦除只存在于编译阶段,在运行时并不会出现泛型类型。如果需要在运行时获取泛型类型信息,可以使用反射等方式来实现。