课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
泛型是程序员在学习java编程开发语言的时候需要重点掌握的一个java编程知识,而今天我们就通过案例分析来了解一下,Java泛型实现方式都有哪些。
Java采用类型擦除(Typeerasuregenerics)的方式实现泛型。用大白话讲就是这个泛型只存在源码中,编译器将源码编译成字节码之时,就会把泛型『擦除』,所以字节码中并不存在泛型。
类型擦除带来的缺陷
作为对比,我们再来简单聊下C#泛型的实现方式。
C#泛型实现方式为「具现化式泛型(Reifiablegenerics)」,不熟悉的C#小伙伴可以不用纠结具现化技术概念,我也不了解这些特性--!
简单点来讲,C#实现的泛型,无论是在程序源码,还是在编译之后的,甚至是运行期间都是切实存在的。
相对比与C#泛型,Java泛型看起来就像是个「伪」泛型。Java泛型只存在程序源码中,编译之后就被擦除,这种缺陷相应的会带来一些问题。
不支持基本数据类型
泛型参数被擦除之后,强制变成了Object类型。这么做对于引用类型来说没有什么问题,毕竟Object是所有类型的父类型。但是对于int/long等八个基本数据类型说,这就难办了。因为Java没办法做到int/long与Object的强制转换。
如果要实现这种转换,需要进行一系列改造,改动难度还不小。所以当时Java给出一个简单粗暴的解决方案:既然没办法做到转换,那就索性不支持原始类型泛型了。
如果需要使用,那就规定使用相关包装类的泛型。另外为了开发人员方便,顺便增加了原生数据类型的自动拆箱/装箱的特性。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。