美文网首页
Java泛型实现机制

Java泛型实现机制

作者: 滑稽的命运 | 来源:发表于2019-10-31 17:49 被阅读0次
  • 原理

    Java泛型是通过类型擦除来实现。

  • 类型擦除的好处

    • 运行时内存负担小

      诸如List<String>、List<Integer>等在运行时只会存在List一个类型。

    • 兼容性好

      Java新增泛型(1.5)之后的版本可以兼容老版本的原始类型。

  • 类型擦除的问题

    • 泛型参数不能使用基本类型

      不能使用如List<int>的类型,只能使用List<Integer>等,存在装箱和拆箱的开销。

    • 泛型类型无法用作方法重载

      void foo(List<Integer> list)和void foo(List<String> list)的参数类型在编译完成后都是List。

    • 泛型类型无法当作真实类型使用

        <T> void foo(T t){
              T instance = new T();
              T[] arr = new T[1];
              Class c = T.class;
              List<T> list = new ArrayList<>();
              if(list instanceOf List<某类型>){}
          }
      

      如上这种是不可行的。

    • 静态方法无法引用类泛型参数

      类的泛型参数只有类实例化的时候才知道是什么类型。

      静态方法若要使用泛型,一般在方法上声明一个泛型类型,如static <S> S foo(S s) {}

    • 运行时类型强转开销

      泛型出现(1.5)之前,手动强转:

      List strs = new ArrayList();
      strs.add("str");
      String val = (String)strs.get(0);
      

      泛型出现(1.5)之后,自动强转:

      原因:编译完成后类型被擦除。

      List<String> strs = new ArrayList();
      strs.add("str");
      String val = strs.get(0);
      

相关文章

  • Kotlin-泛型和委托

    泛型 泛型的使用是为了程序有更好的扩展性。泛型类和泛型方法 泛型的高级特性java的泛型是通过类型擦除机制来实现的...

  • Kotlin之泛型的实化、协变、逆变

    1、泛型的实化 Java中泛型是在JDK1.5引入的,是一个伪泛型,它是通过泛型擦除机制来实现的。泛型只存在编译时...

  • Java泛型实现机制

    原理Java泛型是通过类型擦除来实现。 类型擦除的好处运行时内存负担小诸如List 、List 等在运行时只会存在...

  • 泛型中 ? super T和 ? extends T的区别

    首先, 说到 Java 的泛型, 我们必须要提到的是Java 泛型的类型擦除机制: Java中的泛型基本上都是在编...

  • Java SE 3

    Java SE 1.Java泛型机制 泛型是Java SE1.5引入的特性,泛型的本质是参数化类型。在类、接口和方...

  • 泛型依赖注入

    泛型依赖注入 1.定义泛型 Java代码: 2.实现基类,声明泛型 Java代码: xml代码:

  • Java的泛型类型擦除及类型擦除带来的问题

    1、泛型的类型擦除 Java的泛型是伪泛型,不同于C++的模板机制,这是因为Java的泛型只存在编译期间,在编译完...

  • Java反射(三)泛型

    一、泛型和Class类从JDK 1.5 后,Java中引入泛型机制,Class类也增加了泛型功能,从而允许使用泛型...

  • java的泛型机制

    <1>:java的泛型机制是javase1.5引入的 <2>:泛型擦除的概念:java中的泛型在编译之后生成的字节...

  • [转载] java泛型(二)、泛型的内部原理:类型擦除以及类型擦

    参考:java核心技术 一、Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型。为什么说Jav...

网友评论

      本文标题:Java泛型实现机制

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