Java泛型擦除是什么
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍了Java泛型擦除是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java泛型擦除是什么文章都会有所收获,下面我们一起来看看吧。泛型信息只存在于代码编
千家信息网最后更新 2025年02月04日Java泛型擦除是什么
这篇文章主要介绍了Java泛型擦除是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java泛型擦除是什么文章都会有所收获,下面我们一起来看看吧。
泛型信息只存在于代码编译阶段,但是在java的运行期(已经生成字节码文件后)与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。
泛型擦除概念
泛型信息只存在于代码编译阶段,但是在java的运行期(已经生成字节码文件后)与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。我们来看一个例子:
ArrayList l1 = new ArrayList();ArrayList l2 = new ArrayList(); System.out.println(l1.getClass()==l2.getClass());
运行代码,结果为True
这是因为ArrayList 和ArrayList 在 jvm 中的 Class 都是 List.class,二者在 jvm 中等同于List
利用类型擦除干"坏事儿"
大家都知道,下面这段代码l.add(123)无法编译通过,因为123不是String类型,这也是使用泛型的好处之一。
ArrayList l=new ArrayList();l.add("abc");l.add(123);
但是我们理解了泛型擦除的原理,我们可以巧妙地利用这个原理结合反射知识干一些"坏事",例如:
ArrayListl=new ArrayList(); l.add("abc"); try { Method method = l.getClass().getDeclaredMethod("add",Object.class); method.invoke(l,"test"); method.invoke(l,100.f); }catch (Exception e) { e.printStackTrace(); } System.out.println("list的大小是:"+l.size()); for ( Object o: l){ System.out.println(o); }
运行结果是:
list的大小是:3abctest100.0(被成功插入到ArrayList中)
我们可以看见100.0 成功地插入到ArrayList 中了,所以利用类型擦除的原理并结合反射的手段就绕过了正常开发中编译器不允许的操作限制。
关于"Java泛型擦除是什么"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Java泛型擦除是什么"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
类型
代码
信息
知识
编译
原理
成功
专业
内容
坏事
大小
字节
文件
是在
术语
篇文章
结果
行期
阶段
反射
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
企飞网络技术
两个服务器
英语作文怎么保持网络安全
成熟的软件开发团队
共筑网络安全协同
如何提高部队网络安全意识
惠普服务器安装后蓝屏
网络安全隐私法 数据
网络安全直接责任人制度
社交网络安全心得体会
小学生关于网络安全图画
软件开发毕业后的职业
如何信任手机软件开发者
新乡优创网络技术
惠普服务器异常断电以后无法启动
ibm服务器说明
成都市公安网络安全在哪上班
软件开发加班制度
鄂尔多斯云计算网络安全
网络技术是学什么
辣苹果网络技术大连
C软件开发技术高转专D卷
英语作文怎么保持网络安全
企业服务器安装安全吗
软件开发 深圳有限公司招聘
数据库如何加入三个字段
网络安全直接责任人制度
如何信任手机软件开发者
手机克隆怎么让新手机数据库
js省市区三级数据库