开发者社区> 问答> 正文

泛型在虚拟机中是什么样呢?

泛型在虚拟机中是什么样呢?

展开
收起
问问小秘 2020-06-23 14:46:24 1310 0
1 条回答
写回答
取消 提交回答
    1. **虚拟机没有泛型类型对象,所有的对象都属于普通类。**无论何时定义一个泛型类型,都自动提供了一个相应的原始类型。原始类型的名字就是删去类型参数后的泛型类型名。擦除类型变量,并替换成限定类型(没有限定的变量用Object)。这样做的目的是为了让非泛型的Java程序在后续支持泛型的 jvm 上还可以运行(向后兼容)
    2. 当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。
    Couple<Singer> cps = ...;
    Singer one = cp.getOne();
    

    擦除cp.getOne的返回类型后将返回Object类型。编译器自动插入Singer的强制类型转换。也就是说,编译器把这个方法调用编译为两条虚拟机指令:

    对原始方法cp.getOne的调用 将返回的Object类型强制转换为Singer类型。

    1. 当存取一个公有泛型域时也要插入强制类型转换。
    //我们写的代码
    Singer one = cps.one;
    //编译器做的事情
    Singer one = (Singer)cps.one;
    

    2020-06-23 14:46:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载