我在一个类中有方法
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);
}
}
}
标题>