Java泛型的本质

一、泛型的本质

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

二、Java泛型

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

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

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

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

 

三、C#泛型

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

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

 

四、小结

Java泛型只是语言层面上的一颗的语法糖以便于程序的开发,而C#泛型是在底层CLR就开始支持,通过类型膨胀实现。


如在代码中定义的List<object>和List<String>等类型,在编译后都会编程List。JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。

List<String> list = new ArrayList<>();
String str = list.get(0);
String str = list.get(0); get的是一个Object类型,然后向下转型为String类型


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值