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

利用反射调用方法,以及绕过泛型检查

2017-07-29 11:20 260 查看
比如知道一个类的对象,我们知道方法的名称,但是只有在运行的时候才知道调用哪个方法,这样只能用反射的方式调用了,拿List举例

List list = new ArrayList();

但是我们只有在实际运行的时候材质到时调用他的add方法,过程如下:

1、取得该类的Class对象:所有反射,在使用之前都必须拿到该类的Class对象(方法有三种,不一 一介绍):

Class c = list.getClass();

2、根据该类的Class对象获得add方法的Method对象:

Method m = c.getMethod("add",Object.class);//参数说明:方法名称、方法参数岁数类的类类型

3、调用方法添加对象到集合

m.invoke(list , 20);//第一个参数是类的对象,第二个参数代表加入集合的元素

4、查看集合的长度

System.out.println(list.size());//这就添加成功了

补充:这种方法添加元素会绕过泛型的检查,因为泛型的检查是在编译阶段进行的,而反射的使用都是跳过编译的,没有编译阶段,直接使用编译后的字节码文件

比如,定义集合对象的时候使用ArrayList <String> list = new ArrayList<String>();

结果一样,最后int 型的20 还是会添加进list,而且不报错,因为他没有进行编译检查阶段,所以不会进行泛型的检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 反射执行方法
相关文章推荐