黑马程序员技术交流社区
标题:
利用反射给泛型类型添加其他类型的值
[打印本页]
作者:
一年之后
时间:
2013-12-28 22:18
标题:
利用反射给泛型类型添加其他类型的值
<p>第一种情况可以编译通过。打印abc
package cn.heima.day02;
import java.util.ArrayList;
import java.util.Collection;
public class GeneriTest {
public static void main(String[] args)throws Exception{
ArrayList<Integer> coll = new ArrayList<Integer>() ;
coll.add(1) ;
coll.add(2) ;
coll.getClass().getMethod("add",Object.class).invoke(coll,"abc") ;
System.out.println(coll.get(2)) ;
}
}</p><p>
第二种情况就类型转换异常,为什么这样?
package cn.heima.day02;
import java.util.ArrayList;
import java.util.Collection;
public class GeneriTest {
public static void main(String[] args)throws Exception{
ArrayList<String> coll = new ArrayList<String>() ;
coll.add("abc") ;
coll.add("bcd") ;
coll.getClass().getMethod("add",Object.class).invoke(coll,1) ;
System.out.println(coll.get(2)) ;
}
}
</p>
复制代码
作者:
doitforyou
时间:
2013-12-29 09:37
我试了下,只要泛型设定的是基本类型的引用类型,如Integer、Character等等,通过反射添加其他元素再进行都不会有转换异常,但是如果泛型设定的是引用类型,则会有转换异常。
这个原因我不是很清楚,你知道的话告诉我下,谢谢了。
但是你如果通过反射得到的不是方法,而是得到一个新的集合,那么你就可以添加任意类型了。
使用的时候注意下就好了。
作者:
tuanjie
时间:
2013-12-29 09:54
ArrayList<String> coll = new ArrayList<String>() ;你限制ArrayList集合里面只能存放String类型的数据, coll.getClass().getMethod("add",Object.class).invoke(coll,1) ;这句代码通过反射调用ArrayList集合里面的add方法为集合添加数据,你添加的是int类型,即使int类型自动装箱为Integer类型,也无法自动转换为String类型,就会出现异常转换问题了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2