反射来加入对象。
先把代码贴出来public class Test01 {
public static void main(String[] args) throws Exception{
[color=red]ArrayList[/color] arr1=new ArrayList();
[color=red]ArrayList[/color] arr2=new ArrayList();
//下面打印出来true,证明泛型只是编译器级别的一个东西,加载到内存还是一样的
System.out.println(arr1.getClass()==arr2.getClass());//一样把
//那么可以用跳过编译器用反射直接加入不通类型的东西,测试打印出"dodo"字符串
arr1.add(88);
arr1.getClass().getMethod("add", Object.class).invoke(arr1, "dodo");
System.out.println(arr1.get(1));//打印出来dodo
System.out.println(arr1.get(0) instanceof Integer);//true
System.out.println(arr1.get(1).toString());//报错(可能是在使用方法的时候,强制转换成Integer就报错了)
//既然如此那么下面这个也应该能正确打印,但是报异常异常为: java.lang.ClassCastException
arr2.add("why");
arr2.getClass().getMethod("add", Object.class).invoke(arr2, Integer.valueOf(33));
System.out.println(arr2.get(1));//就报错,可能是arr2.get(1)转换成string报错
}
}
注意:红色的不能换掉
请大家发表下自己的看法。(额,这断代码,是我前几天看地,忘记URL了,抱歉)
arr1通过反射加入字符串的时候没事,但是提取出来,使用方法的时候就报错
arr2不能通过反射来加入整形
分享到:
2010-11-12 13:29
浏览 1000
评论