通过反射了解集合泛型的本质
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,说明数据已经加进去了,由此证明了我们的结论是正确的。
先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,说明数据已经加进去了,由此证明了我们的结论是正确的。
相关文章推荐
- Java反射(六)-Java通过反射了解集合泛型的本质
- JAVA通过反射了解集合泛型本质
- 通过反射了解集合泛型的本质
- [javaEE] 反射-通过反射了解集合泛型本质
- 通过反射了解集合泛型的本质
- 通过反射了解集合泛型本质
- Java--Reflect(反射)专题6——通过反射了解集合泛型的本质
- 通过反射了解集合泛型的本质
- java反射之通过反射了解集合泛型的本质(详解)
- 24、Java入门—反射之通过反射了解集合泛型的本质
- java反射之通过反射了解集合泛型的本质
- 通过反射了解集合泛型的本质
- java反射--通过反射了解集合泛型的本质
- Java反射--通过反射了解集合泛型的本质
- Java反射(六)----- 通过反射了解集合泛型的本质
- 通过反射了解泛型的本质
- java反射学习笔记(4)----通过反射来了解泛型的本质
- 反射了解集合泛型的本质
- java中通过反射了解泛型的本质
- 通过反射看集合泛型的本质-5