/**
* 执行某对象方法
* @param owner 对象
* @param methodName 方法名
* @param args 参数
* @return 方法返回值
* @throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object... args)
throws Exception {
Class ownerClass = owner.getClass();
Class[] argsClass = null;
if (args == null) {
argsClass = new Class[0];
} else {
argsClass = new Class[args.length];
}
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
使用上述方法可以调用一个类实例的方法,对于传统方法没有问题,
但是当该方法传递的是接口参数或者是抽象类参数时,就会抛出找不到该方法的异常
究其原因,是因为args[i].getClass()获取的是当前实例的类,而非接口或抽象类的类,因此找不到对应方法应该如何实现上述的方法传递动态参数?
/** 用户ID */
private String id;
/** 用户名 */
public String name;
public void setId(String id) {
this.id = id;
}
public String getId() {
return this.id;
}
}
public class Manager extends User {
public void setId(String id) {
this.id = "WMW_"+id;
}
}
public class Demo{
public void runSet(User u,Integer id){
u.setId(id);
}
}
用反射执行Demo.runSet 方法 传入Manager 实例
笨笨