美文网首页
TypeParameterResolver

TypeParameterResolver

作者: 93张先生 | 来源:发表于2020-09-07 11:56 被阅读0次

    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 接口中常用的方法有三个,分别是:
    1. Type getRawType()一一返回 参数化类型中的原始类型,例如 List<String> 的原始类
      型为 List 。
    2. Type[] getActualTypeArguments()一一获取参数化类型的类型变量或是实际类型列表,例如 Map<Integer, String> 的实际泛型列表 Integer 和 String 。需要注意的是,该列表的元素类型都是 Type ,也就是说,可能存在多层嵌套的情况。
    3. 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 就是类型变量,它在编译 时需被转换为一个具体的类型后才能正常使用。
      该接口中常用的方法有三个,分别是:
      1. Type[] getBounds()一一获取类型变量的上边界,如果未明确声明上边界则默认为
        Object 。 例如 class Test<K extends Person> 中 K 的上界就是 Person 。
      2. D getGenericDeclaration()一一获取声明该类型变量的原始类型,例如 class Test<K
        extends Person>中 的原始类型是 Test 。
      3. String getName()一一获取在源码中定义时的名字,上例中为 K 。
    • GenericArrayType 表示的是数组类型且组成元素是 ParameterizedType 或 Type Variable .例如 List<String>[]或 T [] 。该接 口只有 Type getGenericComponentType() 一个方法,它返回数组的组成元素。
    • WildcardType 表示的是通配符泛型,例如? extends Number 和? super Integer 。
      WildcardType 接口有两个方法,分别是:
      1. Type[] getUpperBounds()一一返回泛型变量的上界 。
      2. Type[] getLowerBounds()一一返回泛型变量的下界 。

    它是一个工具类,提供了一系列静态方法来解析指定类中的宇段、方法返回值或方法参数的类型。

    相关文章

      网友评论

          本文标题:TypeParameterResolver

          本文链接:https://www.haomeiwen.com/subject/pohvuhtx.html