1. Java 泛型基础
Java中的泛型擦除(Type Erasure)是Java编译器为了兼容之前的非泛型代码而采用的一种机制。在编译过程中,Java编译器会将泛型类型转换为原始类型,并在必要时插入强制类型转换。
泛型擦除有以下几个主要特点:
1. 类型变量擦除:在泛型类或泛型接口中,类型参数(如T、E等)会被擦除为它们的上界类型(通常是Object)。例如,List<String>在编译后会被擦除为List。
2. 桥方法生成:在编译泛型类或泛型接口时,Java编译器会为了保持多态性而生成桥方法。桥方法是指为了解决继承层次结构中泛型方法擦除所带来的类型变化而添加的方法,以保持类型安全。桥方法使用桥接调用来链接泛型方法的调用。
3. 泛型数组的限制:由于泛型的类型擦除,无法直接创建具有参数化类型的数组。例如,List<String>[]是不允许的,只能创建通配类型的数组List[]。
泛型擦除的优势在于它可以使现有的非泛型代码和泛型代码在编译层面保持兼容,并且可以减少运行时的类型检查和装箱操作,提高性能。但也存在一些限制和注意事项,如无法直接在运行时获取泛型的实际类型参数信息。
尽管在泛型擦除的情况下无法获取完整的泛型类型信息,但通过使用反射、边界类型限制和通配符等技术,可以在一定程度上操作和处理泛型对象。
2. Java 5 类型接口
3. Spring 泛型类型辅助类
4. Spring 泛型集合类型辅助类
5. Spring 方法参数封装 - MethodParameter
6. Spring 4.0 泛型优化实现 - ResolvableType
7. ResolvableType 的局限性
8. 面试题精选
Java 泛型擦写发生在编译时还是运行时?
运行时
请介绍 Java 5 Type 类型的派生类或接口
请说明 ResolvableType 的设计优势?