跟王老师学反射(六):使用反射调用方法
学习内容
使用反射调用方法
当获得某个类对应的Class对象后,就可以通过该Class对象的getMethods()方法或getMethod()方法来获取全部方法或指定方法,这二个方法的返回值是Method对象数组,或者Method对象。
一、public Objectinvoke(Object obj,Object... args)获得Method对象后,程序就可以通过该Method来调用对应的方法,在Method里包含一个invoke方法。
该方法中的obj是执行该方法的对象,后面的args是执行该方法时传入该方法的参数
使用参数args
在obj
上指派该对象所表示方法的结果
public
static
void
test4()
throws
Exception{
Class<Person> personClass = Person.
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标志的值。
private
void
setName(String name) {
this
.name = name;
}
1234567891011121314public
static
void
test5()
throws
Exception{
Class<Person> personClass = Person.
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);
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。