如何使用反射调用带参数的方法?
我想指定这些参数的值。
答案 0 :(得分:15)
这是一个使用包含原语的反射来调用方法的简单示例。
import java.lang.reflect.*;
public class ReflectionExample {
public int test(int i) {
return i + 1;
}
public static void main(String args[]) throws Exception {
Method testMethod = ReflectionExample.class.getMethod("test", int.class);
int result = (Integer) testMethod.invoke(new ReflectionExample(), 100);
System.out.println(result); // 101
}
}
为了保持健壮,您应该捕获并处理所有经过检查的与反射相关的异常NoSuchMethodException
,IllegalAccessException
,InvocationTargetException
。
答案 1 :(得分:3)
使用反射调用类方法非常简单。 您需要在其中创建一个类并生成方法。如下所示。
package reflectionpackage;
public class My {
public My() {
}
public void myReflectionMethod() {
System.out.println("My Reflection Method called");
}
}
并使用反射在另一个类中调用此方法。
package reflectionpackage;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionClass {
public static void main(String[] args)
throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class c=Class.forName("reflectionpackage.My");
Method m=c.getDeclaredMethod("myReflectionMethod");
Object t = c.newInstance();
Object o= m.invoke(t);
}
}
答案 2 :(得分:0)
您可以在任何对象中使用getClass来发现它的类。然后,您可以使用getMethods来发现所有可用的方法。获得正确的方法后,您可以使用任意数量的参数调用invoke
答案 3 :(得分:0)
这是我所知道的最简单的方法,它需要被try& amp;捉:
方法m = .class.getDeclaredMethod(“”,arg_1.class,arg_2.class,... arg_n.class); result =()m.invoke(null,(Object)arg_1,(Object)arg_2 ...(Object)arg_n);
这是用于调用静态方法,如果要调用非静态方法,则需要将m.invoke()的第一个参数从null替换为调用基础方法的对象。
不要忘记将导入添加到java.lang.reflect。*;