• Type Java类型


    参考:https://blog.csdn.net/a327369238/article/details/52621043

    Type —— Java类型
      Type是一个空接口,所有类型的公共接口(父接口),其意义表示Java所有类型,这里所谓的类型是从Java整个语言角度来看的,比如原始类型、参数化类型(泛型)、类型变量及其数组等,可以理解为,Class(类)是Java对现实对象的抽象,而Type是对Java语言对象的抽象。

    Type的子孙
    概述
      注意区分类型(Type)与类(Class)的区别,这里Class是Type的一种,而像数组、枚举等“类型”是相对于Class来说。

        @org.junit.Test
        public void test5() throws NoSuchMethodException {
            String[] s=new String[]{"1"};
            Class<? extends String[]> aClass1 = s.getClass();
            if (String[].class.isAssignableFrom(aClass1)){
                System.out.println(11111);
            }
            Class<? extends DeleteFlagEnum> aClass2 = DeleteFlagEnum.DELETE.getClass();
            if (Enum.class.isAssignableFrom(aClass2)){
                System.out.println(2222);
            }
            //从下面方法可以看出,具体的枚举类,是Enum的子类
            //DeleteFlagEnum的父类是Enum
            s.getClass().isEnum();
        }

    Type的直接子接口
    1.ParameterizedType: 表示一种参数化的类型,比如Collection,即普通的泛型。
    2.TypeVariable:是各种类型变量的公共父接口,就是泛型里面的类似T、E。
    3.GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型,比如List<>[],T[]这种。
    4.WildcardType:代表一种通配符类型表达式,类似? super T这样的通配符表达式。

    Type的直接子类
      Type的直接子类只有一个,也就是Class,代表着类型中的原始类型以及基本类型。关于Class详见:Class —— 反射基石。

    Type子接口解析
    1.ParameterizedType
      参数化类型,即泛型,类似List<T>、Map<Integer, String>、List<? extends Number>带有类型参数的类型,当然,也可以是自定义的,再调用getRawType()与getActualTypeArguments()两个方法,就可以得到声明此参数化类型的类(java.lang.Comparable)和实际的类型参数数组([? super T]),而这个? super T又是一个WildcardType类型。
    ParameterizedType详见:Java类型之参数化类型。

    2.TypeVariable
      类型变量,如参数化类型中的E、K等类型变量,表示泛指任何类,如果加上extends/super限定,则就会有相应的上限、下限。
    TypeVariable详见:Java类型之类型变量。

    3.GenericArrayType
      泛型数组,表示上面两种的数组类型,即形如:A<T>[],T[][]类型。
    GenericArrayType详见:Java类型之泛型数组。

    4.WildcardType
      通配符表达式,或泛型表达式,它虽然是Type的一个子接口,但并不是Java类型中的一种,表示的仅仅是类似 ? extends T、? super K这样的通配符表达式。
    WildcardType详见:Java类型之泛型表达式。

    Java类型分类
    Java的所有类型包括:
    1. raw type:原始类型,对应Class
    2. parameterized types:参数化类型,对应ParameterizedType
    3. array types:数组类型,对应GenericArrayType
    4. type variables:类型变量,对应TypeVariable
    5. primitive types:基本类型,仍然对应Class
    1). 1中的Class,不仅仅指平常所指的类,还包括数组、接口、注解、枚举等结构。
    2). 3中的数组类型GenericArrayType,应该指的是2、4类型数组,而不是一般我们说的数组,我们一般所说的数组是指1、5类型数组,他们还是1,也就是Class类型。
    3). List<T ? entends>[]:这里的List就是ParameterizedType,T就是TypeVariable,T ? entends就是WildcardType(注意,WildcardType不是Java类型,而是一个表达式),整个List<T ? entends>[]就是GenericArrayType。

  • 相关阅读:
    英语入门班第十八课-②特殊疑问句 whose、when、whom、which、how 的用法
    英语入门班第十八课-①特殊疑问句 where、what、why 的用法
    英语入门班第十七课-②情态动词 have to、ought to、should、dare、be able to、need、had better 的用法
    英语入门班第十七课-①情态动词 can、could、may、might、must 的用法
    Nginx反向代理访问内网服务器
    sqlite无法保存数据
    mysql绿色版安装
    配色网站
    via浏览器和Alook浏览器插件安装
    ESLint自用规则
  • 原文地址:https://www.cnblogs.com/z-test/p/11677779.html
Copyright © 2020-2023  润新知