• JAVA泛型实现原理


    1. Java范型时编译时技术,在运行时不包含范型信息,仅仅Class的实例中包含了类型参数的定义信息。
    泛型是通过java编译器的称为擦除(erasure)的前端处理来实现的。你可以(基本上就是)把它认为是一个从源码到源码的转换,它把泛型版本转换成非泛型版本。 基本上,擦除去掉了所有的泛型类型信息。所有在尖括号之间的类型信息都被扔掉了,因此,比如说一个List类型被转换为List。所有对类型变量的引用被替换成类型变量的上限(通常是Object)。而且,无论何时结果代码类型不正确,会插入一个到合适类型的转换。

    1. <T> T badCast(T t, Object o) {
    2. return (T) o; // unchecked warning
    3. }

    类型参数在运行时并不存在。这意味着它们不会添加任何的时间或者空间上的负担,这很好。不幸的是,这也意味
    着你不能依靠他们进行类型转换。

    2.一个泛型类被其所有调用共享
    下面的代码打印的结果是什么?

    1. List<String> l1 = new ArrayList<String>();
    2. List<Integer> l2 = new ArrayList<Integer>();
    3. System.out.println(l1.getClass() == l2.getClass());

    或许你会说false,但是你想错了。它打印出true。因为一个泛型类的所有实例在运行时具有相同的运行时类(class),
    而不管他们的实际类型参数。
    事实上,泛型之所以叫泛型,就是因为它对所有其可能的类型参数&#

  • 相关阅读:
    如何使用 Angular 服务器端渲染的 Transfer State Service
    WEB3-众筹合约
    BUUCTF Reverse/[GWCTF 2019]re3
    通过shell编写内存监视的脚本来介绍一些基本shell脚本操作
    AndroidNDK JNI中调用java方法
    Linux CentOS7 history命令
    Hive基础教程
    <网络安全>《30 网络信息安全基础(1)常用术语整理》
    本地JS文件批量压缩
    [数据结构]栈和队列
  • 原文地址:https://blog.csdn.net/cqn2bd2b/article/details/126635638