您的位置:首页 > 其它

通过反射了解集合泛型的本质

2016-08-12 14:18 295 查看
通过Class,Method来了解泛型的本质,

先new 两个List:

ArrayList list = new ArrayList();

ArrayList<String> list1 = new ArrayList<String>();list1.add("hello");这是没有问题的,而list1.add(20);错误的,因为泛型限制了数据类型,再来看:
Class c1 = list.getClass();
Class c2 = list1.getClass();
System.out.println(c1 == c2);可以得到结果为true,即c1=c2,我们知道,反射的操作是编译之后的操作,这说明编译之后集合的泛型是去泛型化的,由此,我们可以下一个结论:Java中集合的泛型,是为了防止错误输入的,只在编译阶段有效,绕过编译就无效了,我可以通过方法的反射来操作,绕过编译:
Method m = c1.getMethod("add", Object.class);
m.invoke(list1, 100);
System.out.println(list1.size());这时候我们看输出结果,size加了1,说明数据已经加进去了,由此证明了我们的结论是正确的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: