Java 泛型面试基础知识
一、Java 泛型核心基础知识
泛型(Generic)是 Java 5 引入的特性,核心目的是在编译期检查类型安全,避免运行时类型转换异常(ClassCastException),同时实现代码复用。

2. 泛型的核心作用
🔒 类型安全:编译期检查类型,避免将错误类型的数据放入集合;
🚫 消除强制类型转换:无需手动强转,代码更简洁;
🔄 代码复用:一套泛型代码可适配多种类型,无需为每种类型写重复代码
泛型的「类型擦除」是什么?举例说明其影响
类型擦除是 Java 泛型的实现机制:泛型仅在编译期生效,编译完成后,所有泛型类型参数会被擦除为「原始类型」(无泛型的类型),JVM 运行时无法感知泛型类型。
import java.util.ArrayList;
import java.util.List;
public class TypeErasureDemo {
public static void main(String[] args) {
List<String> strList = new ArrayList<>();
List<Integer> intList = new ArrayList<>();
// 类型擦除后,strList和intList的实际类型都是ArrayList
System.out.println(strList.getClass() == intList.getClass()); // 输出:true
// 反射绕过编译检查,可向String类型的List中放入Integer(运行时无泛型检查)
try {
List<String> list = new ArrayList<>();
list.getClass().getMethod("add", Object.class).invoke(list, 123);
System.out.println(list); // 输出:[123](编译期报错,但运行期可行)
} catch (Exception e) {
e.printStackTrace();
}
}
}
编译期:List
运行期:泛型被擦除为 List,通过反射可放入任意类型,体现「类型擦除」的影响;
核心问题:类型擦除导致泛型无法用于「运行时类型判断」(如 if (list instanceof List
面试高频题:? extends T 和 ? super T 的区别(PECS 原则)
Producer Extends: 如果集合是「生产者」(只从中读取数据),用 ? extends T;
Consumer Super: 如果集合是「消费者」(只向其中写入数据),用 ? super T。

浙公网安备 33010602011771号