Java泛型 VS C#泛型 (伪泛型 VS 真泛型)

Posted 求知若饥虚心若愚,脚着沃野长望星空,天高海阔水静深流.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java泛型 VS C#泛型 (伪泛型 VS 真泛型)相关的知识,希望对你有一定的参考价值。

一、泛型的本质

泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用。

二、Java泛型

Java 泛型是Java1.5新增的特性,JVM并不支持。

实现原理:Java源代码里面类型提供实现泛型功能,而编译后Class文件类型就变成原生类型(即类型被擦除掉),而在引用处插入强制类型转换以实现JVM对泛型的支持。本质是Java泛型只是Java提供的一个语法糖,底层

的JVM并不提供支持,Java中的泛型属于伪泛型。

但是编译后的字节码通过反射后还是可以获取到泛型的真实类型信息,因为泛型擦除并没有把保存泛型元数据擦除掉。

 

三、C#泛型

C# 泛型是2.0C#和CLR中新增的特性,CLR支持。

实现原理:C#无论语言层面还是CLR都提供对泛型的支持,所以C#泛型编译后MSIL泛型都是切实存在的,类型不没有变成原生类型,而是通过类型膨胀实现,在运行期生成,自己的虚方法表和类型数据.C#泛型属于

 

四、小结

以上是关于Java泛型 VS C#泛型 (伪泛型 VS 真泛型)的主要内容,如果未能解决你的问题,请参考以下文章

Java - 为什么Java的泛型要用“擦除“实现

Java 泛型的作用及其基本概念

泛型-类型擦除

Java 泛型泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )

java泛型泛型的内部原理:类型擦除以及类型擦除带来的问题

java泛型 泛型的内部原理:类型擦除以及类型擦除带来的问题