您的位置:首页 > 编程语言 > Java开发

Java--反射(五)从反射看泛型集合的本质

2017-10-20 20:58 148 查看

泛型的本质是为了在编译前防止错误参数的输入,在运行过程中无效

首先,由于反射机制是在编译后进行的,Class对象就相当于字节码文件,验证:

ArrayList a1 = new ArrayList();
a1.add("CSDN");
ArrayList<String> a2 = new ArrayList();
Class c1 = a1.getClass();
Class c2 = a2.getClass();
System.out.println(c1==c2);
//true


而我们如果可以通过反射机制来在a1添加一个非String类型的对象,则可证明标题的观点。验证:

Class c = a1.getClass();
try {
Method m = c.getMethod("add", Object.class);
m.invoke(a,100);
for (Object obj:a){
System.out.println(obj.toString());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//CSDN
//100


拓展

我们可以引用反射机制来创建一个有着不同数据类型的ArrayList对象。

以上大部分内容来源于慕课网的”反射——Java高级开发必须懂的”课程,网址是http://www.imooc.com/learn/199,感谢Cedar老师的辛勤付出!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java