想实现这样一个功能,在程序运行时根据用户输入的参数(类名,方法名,方法的参数)来 运行用户指定类里 指定的方法,且这个方法的参数个数不确定。最后返回这个方法的返回值

解决方案 »

  1.   

    Object result = method.invoke(object, new Object[] {param1, param2, ..., paramN}); Class cls = java.lang.String.class; 
    Method method = cls.getMethod("substring", new Class[] {int.class}); 
      

  2.   

    public static Object invokeMethod(Object instance, String methodName, Object arg)  throws NoSuchMethodException,  IllegalAccessException, InvocationTargetException ...{  Object[] args = new Object[1];  args[0] = arg;  return invokeMethod(instance, methodName, args);  }3L的就是的。
      

  3.   

    提问三楼:
    Object result = method.invoke(object, new Object[] {param1, param2, ..., paramN}); 
    我的需求是参数不固定,  你这里的param1,param2,,,paramN 怎么处理,才能适应多个参数的需求呢?
      

  4.   

    以 String 的 public boolean regionMatches(boolean ignoreCase,
                                 int toffset,
                                 String other,
                                 int ooffset,
                                 int len)
    为例 Class cls = String.class; Method method = cls.getMethod("regionMatches", new Class[] {boolean.class,int.class,String.class,int.class,int.class}); Object[] params = { Boolean.TRUE, Integer.valueOf(1), "foobaz" , Integer.valueOf(1), Integer.valueOf(3)};
    Object result = method.invoke("fOOBAR",params);
    System.out.println((Boolean)result);
      

  5.   

    我还是要说明一点 : 程序在运行时不知道要调用的这个方法有多少个参数,和每一个参数的类型。
     Method method = cls.getMethod("regionMatches", new Class[] {boolean.class,int.class,String.class,int.class,int.class});    Object[] params = { Boolean.TRUE, Integer.valueOf(1), "foobaz" , Integer.valueOf(1), Integer.valueOf(3)};
    按你这个写法的话,好像还是事先知道参数的个数和类型了啊,
      

  6.   

    假如我有一个类是这样的:package com.my.Test;public class Myfunction {
    public String my(String para) {
    return "in Myfunction +++++>>>" + para;
    } public String myString(int a, int b) {
    return "in Myfunction >myString +++++>>>";
    } public String my1() {
    return " 无参数 ";
    }
    }
    我在程序运行时输入这类的名字 (com.my.Test.Myfunction)和要调用的方法名字(myString)
     
     还有参数 比如 (3,5)
     
    怎样才能正确 的调用到上面类中的public String myString(int a, int b)方法 并返回运行结果
      

  7.   

    使用beanshellnew Interpreter().eval("new com.my.test.Myfunction().myString(1,2)");
      

  8.   

    new Object[] 这里面放参数,你想怎么放就怎么放。