跟王老师学反射(六):使用反射调用方法
发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,学习内容使用反射调用方法当获得某个类对应的Class对象后,就可以通过该Class对象的getMethods()方法或getMethod()方法来获取全部方法或指定方法,这二个方法的返回值是Metho
学习内容
使用反射调用方法
当获得某个类对应的Class对象后,就可以通过该Class对象的getMethods()方法或getMethod()方法来获取全部方法或指定方法,这二个方法的返回值是Method对象数组,或者Method对象。
一、public Object invoke(Object obj, Object... args)
获得Method对象后,程序就可以通过该Method来调用对应的方法,在Method里包含一个invoke方法。
该方法中的obj是执行该方法的对象,后面的args是执行该方法时传入该方法的参数
使用参数 args
在 obj
上指派该对象所表示方法的结果
二、调用方法例子
12345678910 | public static void test4() throws Exception{ Class class ; Person person = personClass.newInstance(); //得到setName方法 Method method = personClass.getMethod( "setName" , String. class ); //调用setName,为name赋值 Object object = method.invoke(person, "wangwu" ); System.out.println(person); System.out.println(object); } |
三、注意事项
当通过Method的invoke方法来调用对应的方法时,Java会要求程序必须有调用该方法的权限,如果 程序确实需要调用某个对象的private方法,可以先调用Method对象的如下方法
public void setAccessible(boolean flag):将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
public boolean isAccessible():获取此对象的 accessible 标志的值。
123 | private void setName(String name) { this .name = name; } |
1234567891011121314 | public static void test5() throws Exception{ Class class ; Person person = personClass.newInstance(); //得到setName方法 Method method = personClass.getDeclaredMethod( "setName" , String. class ); //调用访问权限检查 if (!method.isAccessible()){ method.setAccessible( true ); } //调用setName,为name赋值 Object object = method.invoke(person, "wangwu" ); System.out.println(person); System.out.println(object); } |