Type 接口的基础知识
Type 是所有类型的父接口,它有四个子接口和一个实现类
image.png- Class 比较常见,它表示的是原始类型 。 Class 类的对象表示 JVM 中的 一个类或接口,每个 Java 类在 NM 里都表现为一个 Class 对象。在程序中可以通过“类名 .class ”、“对象 .getClass()”或是“Class.forName(“类名”)”等方式获取Class对象。数组也被映射为Class 对象,所有元素类型相同且维数相同的数组都共享同一个 Class 对象 。
- ParameterizedType 表示的是参数化类型,例如 List<String> 、Map<Integer,String>、Service<User>这种带有泛型的类型。Parameterized Type 接口中常用的方法有三个,分别是:
- Type getRawType()一一返回 参数化类型中的原始类型,例如 List<String> 的原始类
型为 List 。 - Type[] getActualTypeArguments()一一获取参数化类型的类型变量或是实际类型列表,例如 Map<Integer, String> 的实际泛型列表 Integer 和 String 。需要注意的是,该列表的元素类型都是 Type ,也就是说,可能存在多层嵌套的情况。
- Type getOwnerType()一一返回是类型所属的类型,例如存在 A<T>类,其中定义了
内部类 lnnerA<l> ,则 InnerA<l>所属的类型为 A<T>,如果是顶层类型则返回 null 。
这种关系比较常见的示例是 Map<K,V>接口与 Map .En盯<K,V>接口 , Map<K,V>
接口是 Map.En町<K,V>接口的所有者。
- Type Variable 表示的是类型变量 ,它用来反映在 JVM 编译该泛型前的信息。例如 List<T>中的 T 就是类型变量,它在编译 时需被转换为一个具体的类型后才能正常使用。
该接口中常用的方法有三个,分别是:- Type[] getBounds()一一获取类型变量的上边界,如果未明确声明上边界则默认为
Object 。 例如 class Test<K extends Person> 中 K 的上界就是 Person 。 - D getGenericDeclaration()一一获取声明该类型变量的原始类型,例如 class Test<K
extends Person>中 的原始类型是 Test 。 - String getName()一一获取在源码中定义时的名字,上例中为 K 。
- Type[] getBounds()一一获取类型变量的上边界,如果未明确声明上边界则默认为
- GenericArrayType 表示的是数组类型且组成元素是 ParameterizedType 或 Type Variable .例如 List<String>[]或 T [] 。该接 口只有 Type getGenericComponentType() 一个方法,它返回数组的组成元素。
- WildcardType 表示的是通配符泛型,例如? extends Number 和? super Integer 。
WildcardType 接口有两个方法,分别是:- Type[] getUpperBounds()一一返回泛型变量的上界 。
- Type[] getLowerBounds()一一返回泛型变量的下界 。
它是一个工具类,提供了一系列静态方法来解析指定类中的宇段、方法返回值或方法参数的类型。
网友评论