本人想通过解析字符串如:“controller.类名.方法标识”用反射机制来动态的调用某类的方法。
在用class.getMethod(方法名,类型数组).invoke(实例对象,参数数组),由此可以看到,方法标识就很复杂。我就想能否像springMVC样,给方法取别名,通过这个别名就能找到这个方法调用。求高人解救啊 !!!!!!!!!!!!!

解决方案 »

  1.   

    获得了方法就能获得其参数类型,已经名称等等。看下面的代码:public class Test { public static void main(String[] args) throws IOException {
    Class<?> c = Test.class;
    Method[] methods = c.getDeclaredMethods();
    for(Method method : methods){
    if("fun".equals(method.getName())){
    Class<?>[] types = method.getParameterTypes();
    System.out.println("方法名称:" + method.getName());
    System.out.println("参数类型:");
    for(Class<?> c1 : types){
    System.out.println(c1.getName());
    }
    System.out.println("==========================");
    }
    }
    }
    public void fun(int a, String b, long c){
    }
    public void fun(int a, String b){
    }
    }
      

  2.   

    那我怎么调用具体的方法,比如我要调用fun(int a,String b)
      

  3.   

    你能获取到你想要的方法了,直接invoke就是了啊,然后传入对应的参数。这有什么问题吗
      

  4.   

    String s = "Test.fun.[int,java.lang.String].[1,2]";你可以考虑类似于这样来调用,字符串里面包含对象,方法名,方法参数的类型列表,以及值。然后去获取对应的方法,然后再调用
      

  5.   


    这怎么没问题,你的fun方法是重载了的,当根据方法名找方法的时候,不是有两个方法吗,怎么动态的调用方法呢。
      

  6.   

    你还是没明白我说什么 。就这样说吧,就你最开始写的那段程序,我现在动态的调用你的第二个fun方法并给了参数(1,"fun");怎么实现invoke方法。希望写代码