Java代码优化

public static void doSome(String className, String methodName,String[]methodArgs){
    Class c = Class.forName(className);
    Object target = c.newInstance();
    if(methodArgs == null) {
        Method m = c.getMethod(methodName);
        m.invoke(target);
    } else if(methodArgs.length == 1) {
        Method m = c.getMethod(methodName,methodArgs[0].getClass());
        m.invoke(target,methodArgs[0]);
    } else if(methodArgs.length == 2) {
        Method m = c.getMethod(methodName,methodArgs[0].getClass(),methodArgs[1].getClass());
        m.invoke(target,methodArgs[0],methodArgs[1]);
    } else if(methodArgs.length == 3) {
        Method m = c.getMethod(methodName,methodArgs[0].getClass(),methodArgs[1].getClass(),methodArgs[2].getClass());
        m.invoke(target,methodArgs[0],methodArgs[1],methodArgs[2]);
    } else if(methodArgs.length == 4) {
        Method m = c.getMethod(methodName,methodArgs[0].getClass(),methodArgs[1].getClass(),methodArgs[2].getClass(),methodArgs[3].getClass());
        m.invoke(target,methodArgs[0],methodArgs[1],methodArgs[2],methodArgs[3]);
    } else if(methodArgs.length == 5) {
        Method m = c.getMethod(methodName,methodArgs[0].getClass(),methodArgs[1].getClass(),methodArgs[2].getClass(),methodArgs[3].getClass(),methodArgs[4].getClass());
        m.invoke(target,methodArgs[0],methodArgs[1],methodArgs[2],methodArgs[3],methodArgs[4]);
    }
}




代码就是上边这样的,就是想通过反射实现一个动态代理,参数是被代理类的类名,被代理类要执行的方法名,被代理类执行的方法的参数,可以怎么再写的好一点呢?

(就是被代理类的参数问题,有几个参数invoke的时候就需要添加几个参数,获取method时候就需要添加几个参数类名)

阅读 1.6k
1 个回答
public static void doSome(String className, String methodName, Object[] methodArgs) throws Exception {
    Class c = Class.forName(className);
    Object target = c.newInstance();
    if (methodArgs == null) {
        methodArgs = new Object[0];
    }
    Class[] classes = new Class[methodArgs.length];
    for (int i = 0; i < methodArgs.length; i++) {
        classes[i] = methodArgs[i].getClass();
    }
    Method method = c.getMethod(methodName, classes);
    method.invoke(target, methodArgs);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题