我觉得如果参数的数量不是那么多的话,可以考虑if else,毕竟反射会带来性能的消耗。另外楼主的这个问题还需要明确的是,参数不同的时候调用的方法名称也不同吗,还是只是方法重载了?

解决方案 »

  1.   

    确实是因为参数比较多,可能有一两百个,所以觉得用不了ifelse...调用方法不是重载,每个方法需要的参数都一样,比如step2(String str,String [] str0)这样
    但是执行的内容都不一样……也没有什么公共的,可以提出来的部分谢谢作答
      

  2.   

    确实是因为参数比较多,可能有一两百个,所以觉得用不了ifelse...调用方法不是重载,每个方法需要的参数都一样,比如step2(String str,String [] str0)这样
    但是执行的内容都不一样……也没有什么公共的,可以提出来的部分谢谢作答
    但是我觉得楼上给你的答案还是使用ifelse了,因为你的方法名不同,反射还是需要方法名,还是需要确定哪个参数对应了哪个方法,并且那个链接里的文章也使用了ifelse语句
      

  3.   

    确实是因为参数比较多,可能有一两百个,所以觉得用不了ifelse...调用方法不是重载,每个方法需要的参数都一样,比如step2(String str,String [] str0)这样
    但是执行的内容都不一样……也没有什么公共的,可以提出来的部分谢谢作答
    但是我觉得楼上给你的答案还是使用ifelse了,因为你的方法名不同,反射还是需要方法名,还是需要确定哪个参数对应了哪个方法,并且那个链接里的文章也使用了ifelse语句
    哦,是这样的,我的参数都是一样的,所以就不用ifelse,固定的用一种反射,反射不同方法名就行了吧
      

  4.   

    确实是因为参数比较多,可能有一两百个,所以觉得用不了ifelse...调用方法不是重载,每个方法需要的参数都一样,比如step2(String str,String [] str0)这样
    但是执行的内容都不一样……也没有什么公共的,可以提出来的部分谢谢作答
    但是我觉得楼上给你的答案还是使用ifelse了,因为你的方法名不同,反射还是需要方法名,还是需要确定哪个参数对应了哪个方法,并且那个链接里的文章也使用了ifelse语句
    哦,是这样的,我的参数都是一样的,所以就不用ifelse,固定的用一种反射,反射不同方法名就行了吧
    那你如何确定使用的是哪一个方法呢?比如你需要在参数为1的时候使用方法1,getDeclaredMethod方法的参数就是为方法1的名称,参数为2,参数就为方法2的名称,这样的话怎么可能固定一种放射呢?除非你的参数就是你的方法名
      

  5.   

    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.Arrays;public class Aloha {
        public void print() {    }
        public void step1(String[] args) {
            System.out.println("step1(): " + Arrays.toString(args));
        }    public void step2(String[] args) {
            System.out.println("step2(): " + Arrays.toString(args));
        }    public void step3(String[] args) {
            System.out.println("step3(): " + Arrays.toString(args));
        }    public static void test(String argsString) throws NoSuchMethodException,
                InvocationTargetException, IllegalAccessException {
            String[] args = argsString.split(",");        Method method = Aloha.class.getDeclaredMethod("step" + args.length, String[].class);
            method.invoke(new Aloha(), new Object[] {args});
        }    public static void main(String[] args) throws Exception {
            test("1");
            test("1, 2");
            test("1, 2, 3");
        }
    }