泛型是什么?
泛型就像是java中的类一样,是一种模板。可以在使用时 指定具体的类型,比较灵活。
为什么需要泛型?
比如容器类,List<T>,可以存储不同类型的对象。使用时比较方便。
但是,编译后的.class文件,不会保存泛型,而是List<Object>,这是类型擦除。
什么意思呢?
即 如果定义了 List<String> ,或者 List<Map>,
编译时 会 做一个 类型转换 (String) Object,(Map)Object
可以理解为一种语法糖,对于开发人员来说,比较方便的一种语法,但是实际上 编译后的文件是不存在泛型的,都是Object 然后做了强制类型转换。
比如 List<String> ,或者 List<Map> 的Class 对象 都是一样的。
那么,怎么获取 泛型类的 具体类型呢?
类型擦除,获取不到具体类型的。但是可以获取到边界类型。
原始类型 (Raw Types):未指定泛型参数的泛型类或接口。
参数化类型 (Parameterized Types):指定了具体泛型参数的类或接口。
数组类型 (Array Types):表示数组的类型,如 int[] 或 String[]。
类型变量 (Type Variables):用于泛型声明中的占位符,如 T 或 E。
基本类型 (Primitive Types):Java 中的基本数据类型,如 int、boolean 等。