反射的应用:泛型擦除

今天我们将要讲述一下反射的一个小应用,来帮助我们更好的理解反射的原理,这个小应用就是**能否在一个泛型为String的List集合中添加Integer类型的数据?**
经过前两篇的讲述,我们已经知道反射最大的一个机制就是我们可以通过配置文件在运行过程中动态的改变要运行的类或者方法,也就是编译时对于要运行的类不先进行编译,而在运行时再进行查看具体是哪一个类要执行。
根据反射的上述特性我们就能想到泛型。泛型与反射的机制正好相反,也就是在编译时检查泛型,而在运行阶段不再检查(“伪泛型”),我们先来看一下泛型这一特性的原因:
1、我们首先写两个list集合,泛型分别为String和Integer:

1 List<Integer> lIntegers = new ArrayList<Integer>();
2 List<String> lStrings = new ArrayList<String>();

2、点击查看两个List的源码,可以发现两个不同泛型的List是同一个接口:

了解了伪泛型是怎么回事后,就可以开始进行我们的应用测试了:
1、首先创建一个泛型为String的List集合,并添加上String类型的值

1 List<String> list = new ArrayList<String>();
2 list.add("爱跑步的大胖子");

2、使用反射获取add方法,并使用反射执行,添加字符串

1 //通过反射获取字节码对象
2 Class<? extends List> c = list.getClass();
3 //一定写object.class 表示什么类型都可以加
4 Method method = c.getMethod("add", Object.class);
5 //对下面这个方法有疑问的,可以去观看我的其它两篇反射文章,有详细的介绍
6 method.invoke(list, "爱跑步的大胖子");

3、打印list集合,我们可以发现Integer类型和String类型同时添加到了泛型为String的list集合中了:

希望这篇文章能对大家有帮助,能更好的帮助大家理解反射。
欢迎大家关注我的个人公众号:“爱跑步的大胖子”,我会在上边更新更多的Java知识。


转载于:https://www.cnblogs.com/apbddpz/p/11279331.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值