/**
 * 执行某对象方法
 * @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()获取的是当前实例的类,而非接口或抽象类的类,因此找不到对应方法应该如何实现上述的方法传递动态参数?

解决方案 »

  1.   

    不知道是我描述的不清楚还是你理解偏差public abstract class User { 
        /** 用户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 实例
    笨笨