我眼中的Java-Type体系(1)

上一篇,提到了Java泛型的“擦除”;今天,我们说下Java-Type体系;

Type是Java 编程语言中所有类型的公共高级接口(官方解释),也就是Java中所有类型的“爹”;其中,“所有类型”的描述尤为值得关注。它并不是我们平常工作中经常使用的 int、String、List、Map等数据类型,而是从Java语言角度来说,对基本类型、引用类型向上的抽象;

Type体系中类型的包括:原始类型(Class)、参数化类型(ParameterizedType)、数组类型(GenericArrayType)、类型变量(TypeVariable)、基本类型(Class);

原始类型,不仅仅包含我们平常所指的类,还包括枚举、数组、注解等;

参数化类型,就是我们平常所用到的泛型List、Map;

数组类型,并不是我们工作中所使用的数组String[] 、byte[],而是带有泛型的数组,即T[] ;

基本类型,也就是我们所说的java的基本类型,即int,float,double等


空接口

Type是个空接口,没有定义任何方法,通过多态提高了程序的扩展性,具体实现去看下面的子类;


Type体系

查看源码,Type接口下共有4个"儿子",每一个“儿子”代表着Java中的一种类型;

1.ParameterizedType

参数化类型,即泛型;例如:List<T>、Map<K,V>等带有参数化的对象;

ParameterizedType源码

2.TypeVariable

类型变量,即泛型中的变量;例如:T、K、V等变量,可以表示任何类;在这需要强调的是,TypeVariable代表着泛型中的变量,而ParameterizedType则代表整个泛型;


TypeVariable源码

3.GenericArrayType

泛型数组类型,用来描述ParameterizedType、TypeVariable类型的数组;即List<T>[] 、T[]等;


GenericArrayType源码


4.Class

上三者不同,Class是Type的一个实现类,属于原始类型,是Java反射的基础,对Java类的抽象;

在程序运行期间,每一个类都对应一个Class对象,这个对象包含了类的修饰符、方法,属性、构造等信息,所以我们可以对这个Class对象进行相应的操作,这就是Java的反射;

5.WildcardType

泛型表达式(或者通配符表达式),即? extend Number、? super Integer这样的表达式;WildcardType虽然是Type的子接口,但却不是Java类型中的一种;

WildcardType源码

以上,简单介绍了Java-Type的体系;为了解决泛型,JDK1.5版本开始引入Type接口;在此之前,Java中只有原始类型,所有的原始类型都是通过Class进行抽象;有了Type以后,Java的数据类型得到了扩展,从原始类型扩展为参数化类型(ParameterizedType)、数组类型(GenericArrayType)、类型变量(TypeVariable);

下一篇,就通过具体的代码,来更加直观的了解以上4种Type类型;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,198评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,823评论 18 399
  • 儿子,妈妈希望你以后做一个真真正正的男子汉。宽厚、有礼、有能力、懂得尊重别人,一定记得只有尊重别人别人才能尊重你的...
    一文莫名阅读 225评论 0 0
  • 感恩今早不明的清晨,秋叶被搜搜的风刮落,让我感到冬天来了 感恩古观音寺早上上香的香客,大家都在祈求菩萨保佑一切都好...
    十八菩提子阅读 169评论 0 0
  • 发现和自己异地很久的前男友在追求新欢,工作三年的大老粗在追求大学女生,本人表示有点无语. 以前的他没钱,一身寒酸...
    天空中的鱼阅读 432评论 0 1