鍍金池/ 問答/Java/ Java代碼優(yōu)化

Java代碼優(yōu)化

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]);
    }
}




代碼就是上邊這樣的,就是想通過反射實現(xiàn)一個動態(tài)代理,參數(shù)是被代理類的類名,被代理類要執(zhí)行的方法名,被代理類執(zhí)行的方法的參數(shù),可以怎么再寫的好一點呢?

(就是被代理類的參數(shù)問題,有幾個參數(shù)invoke的時候就需要添加幾個參數(shù),獲取method時候就需要添加幾個參數(shù)類名)

回答
編輯回答
安若晴
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);
}
2017年6月1日 22:28