美文网首页码神之路:Java篇
Type及其子接口的来历

Type及其子接口的来历

作者: JSON_NULL | 来源:发表于2017-12-28 17:09 被阅读24次

泛型出现之前

没有泛型的时候,只有所谓的原始类型。此时,所有的原始类型都通过字节码文件类Class类进行抽象。Class类的一个具体对象就代表一个指定的原始类型。

泛型出现之后

泛型出现之后,扩充了数据类型。从只有原始类型扩充了参数化类型(ParameterizedType)、类型变量类型(TypeVariable)、泛型限定的参数化类型 (含通配符+通配符限定表达式)(WildcardType)、泛型数组类型(GenericArrayType)。

与泛型有关的类型不能和原始类型统一到Class的原因

产生泛型擦除的原因

为了使用泛型的优势又不真正引入泛型,Java采用泛型擦除的机制来引入泛型。Java中的泛型仅仅是给编译器javac使用的,确保数据的安全性和免去强制类型转换的麻烦。但是,一旦编译完成,所有的和泛型有关的类型全部擦除。

Class不能表达与泛型有关的类型

因此,与泛型有关的泛型实例(ParameterizedType)、类型变量(TypeVariable)、泛型参数表达式 (含通配符+通配符限定表达式)(WildcardType)、泛型数组(GenericArrayType)这些类型全部被打回原形,在字节码文件中全部都是泛型被擦除后的原始类型,并不存在和自身类型一致的字节码文件。所以和泛型相关的新扩充进来的类型不能被统一到Class类中。

与泛型有关的类型在Java中的表示

为了通过反射操作这些类型以迎合实际开发的需要,Java就新增了ParameterizedType,GenericArrayType,TypeVariable 和WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型。

Type的引入:统一与泛型有关的类型和原始类型Class

为了程序的扩展性,最终引入了Type接口作为Class,ParameterizedType,GenericArrayType,ypeVariable和WildcardType这几种类型的总的父接口。这样实现了Type类型参数可以接受以上五种子类的实参,而以上五种类型的返回值可以用Type类型的变量来接收。

从上面看到,Type的出现仅仅起到了通过多态来达到程序扩展性提高的作用,没有其他的作用。因此Type接口的源码中没有任何方法。

相关文章

  • Type及其子接口的来历

    泛型出现之前 没有泛型的时候,只有所谓的原始类型。此时,所有的原始类型都通过字节码文件类Class类进行抽象。Cl...

  • Type类型

    Type类型 Type是接口,它的实现类(子接口)有Class, ParameterizedType, Wildc...

  • TypeParameterResolver

    Type 接口的基础知识 Type 是所有类型的父接口,它有四个子接口和一个实现类 Class 比较常见,它表示的...

  • JAVA中的集合框架 List (二)

    Collection接口List接口简介 Collection接口、子接口及其实现类,Collection接口是j...

  • Java Collections Framework - 1.C

    Java Collections Framework中大的接口分两部分:一部分是Collection接口及其子接口...

  • Map集合

      之前对Collection接口以及其对应的子接口已经有所了解,可以发现在Collection接口之中所保存的数...

  • Android判断EditText是否有输入内容的方法

    1、强烈的推荐使用android.text.TextUtils.isEmpty(CharSequence及其子接口...

  • 3.reflect.ChanDir()

    2. 接口方法实现-ChanDir() 方法 将Type接口的值,即动态类型入栈 调用Type接口方法ChanDi...

  • 接口

    接口 接口类型 空接口 接口嵌套 接口断言 type关键字

  • USB Type-C及其它USB接口区别

    Type-C是USB接口的一种连接介面,不分正反两面均可插入,大小约为8.3mm×2.5mm,和其他介面一样支持U...

网友评论

    本文标题:Type及其子接口的来历

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