【Java面试必考】泛型与反射核心考点:类型擦除、通配符、API及利弊

【Java面试必考】泛型与反射核心考点:类型擦除、通配符、API及利弊 1. 泛型Generics从痛点到原理为什么需要泛型在没有泛型前集合里什么都能塞。你以为存的是String不小心混进了一个Integer取出来强转时直接ClassCastException崩溃。作用编译期类型检查把运行时报错提前到写代码时报错同时省去了强制类型转换的麻烦。核心考点类型擦除Type ErasureJava的泛型是**“伪泛型”**通俗解释泛型只是给编译器看的检查规则。一旦编译成.class字节码文件所有的T、String统统都会被抹除掉全变成了Object或者其上限类型。面试坑题ListString和ListInteger在运行时的类类型其实是同一个都是ArrayList.class无法通过反射在运行期间获取泛型真实的具体类型。高频难点通配符与 PECS 原则? extends T上界通配符表示类型必须是 T 或 T 的子类。? super T下界通配符表示类型必须是 T 或 T 的父类。PECS原则Producer Extends, Consumer Super如果你需要频繁读取生产数据供外部使用用extends集合不能 add只能 get。如果你需要频繁写入消费传入的数据用super集合可以 add 儿子但 get 出来只能是 Object。2. 反射ReflectionJava 框架的灵魂一句话总结在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意方法这就是反射。三种获取 Class 对象的方式必背代码Class.forName(com.xxx.User)最常用结合配置文件实现完全动态User.class需要提前导包userInstance.getClass()已经有实例对象了反射的利与弊优点神兵利器极高的动态性Spring 的 IOC控制反转、AOP动态代理、MyBatis 的属性注入全靠反射没有反射就没有现代 Java 框架。解耦代码可以根据配置文件动态加载不同模块。缺点打破规则的代价性能损耗绕过了编译器的优化动态解析类信息、方法调用比直接调用慢得多。破坏封装性安全风险可以直接使用Field.setAccessible(true)强行访问甚至修改类里面定义的private私有变量这打破了类的安全保护机制。