学习内容
使用反射调用方法
当获得某个类对应的Class对象后,就可以通过该Class对象的getMethods()方法或getMethod()方法来获取全部方法或指定方法,这二个方法的返回值是Method对象数组,或者Method对象。
一、public Object invoke(Object obj, Object... args)
获得Method对象后,程序就可以通过该Method来调用对应的方法,在Method里包含一个invoke方法。
该方法中的obj是执行该方法的对象,后面的args是执行该方法时传入该方法的参数
使用参数 args 在 obj 上指派该对象所表示方法的结果
二、调用方法例子
1 2 3 4 5 6 7 8 9 10 | public static void test4()throws Exception{
Class<Person> personClass = Person.class;
Person person = personClass.newInstance();
Method method = personClass.getMethod("setName", String.class);
Object object = method.invoke(person, "wangwu");
System.out.println(person);
System.out.println(object);
}
|
三、注意事项
当通过Method的invoke方法来调用对应的方法时,Java会要求程序必须有调用该方法的权限,如果 程序确实需要调用某个对象的private方法,可以先调用Method对象的如下方法
1 2 3 | private void setName(String name) {
this.name = name;
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static void test5()throws Exception{
Class<Person> personClass = Person.class;
Person person = personClass.newInstance();
Method method = personClass.getDeclaredMethod("setName", String.class);
if(!method.isAccessible()){
method.setAccessible(true);
}
Object object = method.invoke(person, "wangwu");
System.out.println(person);
System.out.println(object);
}
|