美文网首页
Java 泛型

Java 泛型

作者: 探索的码易 | 来源:发表于2020-07-08 09:15 被阅读0次

    什么是泛型

    Java 1.5 开始引进的参数性类型的,是在编译器进行类型擦除的类型转化,所以Java的泛型是伪范型;在经过编译器转化成字节码的时候回归到原始类型,

    擦除类型就是通过编译器回归到原始类型

    1. 检查泛型类型,获取目标类型
    2. 擦除类型变量,并替换为限定类型
    如果泛型类型的类型变量没有限定(<T>),则用Object作为原始类型
    如果有限定(<T extends XClass>),则用XClass作为原始类型
    如果有多个限定(T extends XClass1&XClass2),则使用第一个边界XClass1作为原始类
    3. 在必要时插入类型转换以保持类型安全
    4. 生成桥方法以在扩展时保持多态性
    

    Java 的泛型的好处

    1. 代码的重复
    2. 代码的健壮性质(只要编译期没有警告,那么运行期就不会出现 ClassCastException)

    泛型限制

    1. 由于范型的擦除,最终是object 或者是原始类型,所以泛型接受的参数不能是基本类型;
    2. 不能使用instanceof 运算符(也是因为泛型擦除的问题)
    3. 不能定义泛型静态常量参数(静态常量参数是先于对象创建的,而泛型的类型参数是对象创建)(字节码时期只是做检查,并没有确定类型)
    4. 泛型类无法重载equals 方法,擦拭后都是都是object 对象
    5. 没法创建泛型实例
    6. 容器内泛型有关系,但是容器之间不会有任何关系

    <?> 通配符 :使用通配符 一个目的 灵活的转型 API

    对类型的大致定向

    1. <? extends A> 上界统配符
      好处:多类型转型
      副作用: 只读
    2. <? super A> 下限统配符
      好处:多类型转型
      只能添加
      3.<?> 非限定
      不能存也不能取
      4.<T> 泛型类型限定

    相关文章

      网友评论

          本文标题:Java 泛型

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