Type类
-
type类是所有类型的父接口,它由四个子接口和一个实现类
-
下面来看这些子接口和子类所代表的类型。
-
Class类比较常见,它表示的是原始类型。Class类表示的是JVM中的一个类或者接口。每个java类在JVM中都表现为一个Class对象。在程序中可以通过类名.class或者对象.getClass()或者是Class.forName(全限定类名)来获取Class对象。数组也也被映射为Class对象,所有元素类型相同并且维数相同的数组都共享一个Class对象。
-
ParameterizedType 表示的参数化类型,例如List,Map<String,Integer>,Servie等。
ParameterizedType接口中常用的方法有3个,分别是:
getRawType() -- 返回参数化类型中的原始类型,如List<String>返回的是List
getActualTypeArguments() -- 一获取参数化类型的类型变量或是实际类型列
表,例如 Map<Integer, String> 的实际泛型列表 Integer String 。需要注意的是,
该列表的元素类型都是Type,也就是说,可能存在多层嵌套的情况。
getOwnerType() -- 返回是类型所属的类型,例如存在A<T>类,其中定义了
内部类InnerA<I> ,则 InnerA<I> 所属的类型为 A<T>,如果是顶层类型则返回 null
这种关系比较常见的示例是 Map<K,V>接口与 Map.Entry<K,V>接口 Map<K,V>
接口是 Map.Entry<K,V>接口的所有者。
- TypeVariable表示的是类型变量,他用来表示JVM编译该泛型前的信息,例如List中的T就是类型变量,它在编译时需要转化成一个具体的变量才能正常使用。该接口有三个方法
Type[] getBounds() -- 获取类型变量的上边界,如果未明确声明上边界则默认为
Object 例如class Test<K extends Person>的上界就是Person
D getGenericDeclaration()一一获取声明该类型变量的原始类型,例如 class Test<K
extends Person>中 的原始类型是 Test。
String getNameO一一获取在源码中定义时的名字,上例中为K。
- GenericArrayType表示的数组类型且成员组成类型是ParameterizedType或者TypeVariable类型,例如List<String[]>或者T[].该接 口只有 Type getGenericComponentType() 一个方法,它返回数组的组成元素。
- WildcardType表示的是通配符泛型,例如? extends Person,? super Integer,它有两个方法
Type[] getUpperBounds()一一返回泛型变量的上界
Type[] getLowerBounds()一-返回泛型变量的下界