📅  最后修改于: 2023-12-03 14:42:18.924000             🧑  作者: Mango
在 Java 中,我们可以通过方法名称获取指定类中的方法对象。这对于编写通用的类库或者框架,或者需要在运行时动态获取指定方法的应用程序非常有用。本文将介绍如何使用反射 API 获取方法对象。
使用 Class
类的 getMethod
或 getDeclaredMethod
方法可以获取到指定类中的公有方法或者私有方法。两者的区别在于,getMethod
只能获取公有方法,而 getDeclaredMethod
可以获取所有方法,包括公有方法和私有方法。具体用法如下:
Class<?> clazz = MyClass.class; // 指定的类名
Method method = clazz.getMethod("methodName", argTypes); // 获取公有方法
Method method = clazz.getDeclaredMethod("methodName", argTypes); // 获取所有方法
其中,methodName
为方法名称,argTypes
是方法的参数类型,如果方法没有参数,则 argTypes
可以为 null
。当方法有多个参数时,argTypes
应该为一个 Class[]
数组,数组元素为每个参数的类型。
上述代码中的 clazz
对象可以通过以下代码获取:
Class<?> clazz = MyClass.class; // 指定的类名
其中,MyClass
是你要获取方法的类名。
通过 Method
类中的 getParameterTypes
和 getReturnType
方法可以获取到方法的参数类型和返回类型。代码示例如下:
Class<?>[] parameterTypes = method.getParameterTypes(); // 获取方法的参数类型数组
Class<?> returnType = method.getReturnType(); // 获取方法的返回类型
有了方法对象后,我们可以使用 Method
类中的 invoke
方法调用该方法,具体用法如下:
Object result = method.invoke(instance, args); // 调用方法
其中,instance
是实例对象,如果要调用类方法,则 instance
可以为 null
。args
是方法的参数数组,如果方法没有参数,则 args
可以为 null
。当方法有多个参数时,args
应该为一个 Object[]
数组,数组元素为每个参数的值。result
是方法的返回值,如果方法没有返回值,则 result
的值为 null
。