一、概述
Java getMethod是一个很实用的反射方法,能够获取指定类的指定方法。在一些需要动态调用方法的场景,getMethod可以大展神威,它可以通过字符串动态调用类中的函数。
getMethod的基本语法如下:
public Method getMethod(String name, Class... parameterTypes) throws NoSuchMethodException, SecurityException
其中,name为指定方法名,parameterTypes为被调用函数的参数类型列表,根据这两个参数可以唯一定位一个方法。如果找不到指定的方法,会抛出NoSuchMethodException异常。
二、使用步骤
1、获取方法所属的Class对象
首先需要获取要调用的方法的所在类的Class对象。Class对象可以通过类名获取,也可以通过实例对象获取。
2、获取Method对象
有了Class对象,就可以通过getMethod方法获取指定的Method对象了。
Class clazz = MyClass.class; Method method = clazz .getMethod("myMethod");
如果需要获取带参数的方法,则需要在getMethod方法中传递参数类型数组。
Method method = clazz.getMethod("myMethod", String.class, int.class);
3、通过Method对象调用方法
通过Method对象的invoke方法,可以动态地执行指定方法。invoke方法可以接收两个参数,第一个参数为要被调用方法的实例对象(如果该方法是静态的,则为null),第二个参数为要被调用方法的参数列表。
MyClass myObj = new MyClass(); method.invoke(myObj, "hello", 123);
另外,如果要调用静态方法,则第一个参数可以为null。
method.invoke(null, "hello", 123);
三、示例代码
import java.lang.reflect.Method; public class MyClass { public void myMethod() { System.out.println("调用了无参方法"); } public void myMethod(String str, int num) { System.out.println("调用了带参数方法,参数为:" + str + ", " + num); } public static void main(String[] args) throws Exception { // 获取Class对象 Class clazz = MyClass.class; // 获取无参方法 Method method1 = clazz.getMethod("myMethod"); method1.invoke(new MyClass()); // 获取带参数的方法 Method method2 = clazz.getMethod("myMethod", String.class, int.class); method2.invoke(new MyClass(), "hello", 123); } }
四、总结
Java getMethod是一个反射方法,可以在运行时通过字符串动态调用类中的函数。通过三个步骤获取要调用的方法,再通过Method对象的invoke方法调用方法。这种动态调用方法的能力可以使程序更加灵活,尤其是在一些需要动态调用方法的场合,为程序员提供了很大的便利。