0
    String className = "com.endpoints.EndPointImpl"; 
    String methodName = "add";
    String args = "2,3";


    try {

        Class<?> clas = Class.forName(className);
        Object obj = Class.forName(className).newInstance(); 
        java.lang.reflect.Method method = null;
        //Type[] types;

        for(java.lang.reflect.Method m :obj.getClass().getMethods())
        {
            if(m.getName().equals(methodName))
            {
                method = m;
                //types = m.getParameterTypes();
                break;
            }
        }

//java.lang.reflect.Method method = clas.getDeclaredMethod(methodName,t);


        Object[] strarr =  args.split(",");

        Object retobj = method.invoke(obj,strarr );

我如何传递参数来调用到目前为止它正在生成异常我知道为什么但是我怎么能传递两个 int

添加(输入,整数)

附言

ArrayList<Object> objArr = new ArrayList<Object>();

        for(java.lang.reflect.Method m :obj.getClass().getMethods())
        {
            if(m.getName().equals(methodName))
            {
                method = m;

                int index = 0;
                for(Type type :m.getGenericParameterTypes())
                {
                    if(type.getClass().equals("Integer"))
                    {
                        objArr.add(Integer.parseInt(strarr[index]));
                    }
                    else if(type.getClass().equals("Float"))
                    {
                        objArr.add(Float.parseFloat(strarr[index]));
                    }
                    index++;
                }

然后在调用中传递 objArr 或者有更好的解决方案,我还想问是否可以创建一个通用的转换函数,以便它将字符串转换为指定的类型

4

2 回答 2

1

编写代码时,您应该始终问自己应该做什么。回答这个问题的最好方法是阅读 Javadoc。此外,当您遇到异常时,请始终提供完整的堆栈跟踪。你不需要你的整个for循环。

使用Method#getDeclaredMethod(String, Class[]). 它接受两个参数

name - the name of the method
parameterTypes - the parameter array

如果该方法被命名add并接受两个int参数,则像这样调用它

java.lang.reflect.Method method = clas.getDeclaredMethod("add", int.class, int.class);

int.class参数是方法采用的参数类型。

您可以调用该方法

method.invoke(object, 3, 3);

其中 object 是类声明add(int, int)方法的一个实例。如果此方法是static,则可以null改为通过。这两个3s 是int您将传递的参数值,就好像您直接调用该方法一样。

object.add(3,3);

如果您接收要作为参数传入的字符串,则需要先转换它们

String args = "2,3";
String[] strarr =  args.split(",");
// with no other validation
int[] values = new int[strarr.length];
for (int i = 0; i < strarr.length; i++) {
    values[i] = Integer.parseInt(strarr[i]);
}

method.invoke(object, values);

显然,在拆分和解析字符串时执行适当的验证。

于 2013-09-02T11:07:02.927 回答
0
  1. 替换这条语句 String args = "2,3"; 整数参数 = {10,20};
  2. 删除此语句 Object[] strarr = args.split(",");
  3. 替换对象 retobj = method.invoke(obj,strarr ); 使用对象 retobj = method.invoke(obj,args);
于 2013-09-02T11:16:25.163 回答