java反射之List添加不属于自己类型数据

2 篇文章 0 订阅
1 篇文章 0 订阅

java反射之List操作

问提

ArrayList strList = new ArrayList<>(); 里面可以添加String类型吗?运行后会报错吗?

报错:

一般都是在编译时候进行报错。但是jvm运行时候不一定报错。因为jvm里面表示为Object的形式,只不过在编译成class文件时候会无法编译通过。那是不是如果我在编译时候通过了那就可以添加进去是吧;

 ArrayList<Integer> strList = new ArrayList<>();
			strList.add(1);
			strList.add(2);
			Class listClass = strList.getClass(); //得到 strList 对象的字节码 对象
			//获取add()方法
			Method m = listClass.getMethod("add", Object.class);
			//调用add()方法
			m.invoke(strList, "gg");
			System.out.println(strList.toString());
			//输出结果[1, 2, gg]
	

编译通过,运行时候也通过;同时也输出了不是Integer类型的值;

解析:

原因:在看完源码时候;add这个方法使用的是泛型E;同时E表示在类被初始化时候才把类型引入进去;但是在没有初始时候还是Object类型;反射是通过类去找方法的同时添加进去;所以只要是Object类型就行。但是Object又是最最基本类型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值