动态地将参数传递给Method.Invoke



我在一个类中有方法

public class ReflectionClass {
    public int add(int a, int b) {
        return a + b;
    }
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    public String concatenate (String a, String b, String c){
        return a + b + c;
    }
}

我试图通过反射来调用这些方法。我手上只有方法名和参数。是否有一种方法可以根据我手头的参数的数量/类型动态地将参数传递到method . invoke()方法中?

正如您在文档中看到的那样,public Object invoke(Object obj, Object... args)接受一个varargs参数-因此您可以简单地在那里传递一个参数数组。

您需要创建一个实例,获取方法,获取参数,通过检查类型和数量来检查参数…然后根据

的内容调用invoke<标题>例子:
public static void main(String[] args) throws Exception {
    Class<?> cls = Class.forName("com.ReflectionClass");
    Object obj = cls.newInstance();
    for (Method m : cls.getDeclaredMethods()) {
        if (m.getParameterCount() == 3 && Arrays.asList(m.getParameterTypes()).contains(String.class)) {
            String a = "A";
            String b = "B";
            String c = "C";
            Object returnVal = m.invoke(obj, a, b, c);
            System.out.println((String) returnVal);
        } else if (m.getParameterCount() == 2 && Arrays.asList(m.getParameterTypes()).contains(int.class)) {
            int a = 5;
            int b = 3;
            Object returnVal = m.invoke(obj, a, b);
            System.out.println(returnVal);
    } else if (m.getParameterCount() == 3 && Arrays.asList(m.getParameterTypes()).contains(int.class)) {
            int a = 5;
            int b = 3;
            int c = 3;
            Object returnVal = m.invoke(obj, a, b, c);
            System.out.println(returnVal);
    }
}
}

相关内容

  • 没有找到相关文章

最新更新