📜  java 按名称获取方法 - Java (1)

📅  最后修改于: 2023-12-03 14:42:18.924000             🧑  作者: Mango

Java 按名称获取方法

在 Java 中,我们可以通过方法名称获取指定类中的方法对象。这对于编写通用的类库或者框架,或者需要在运行时动态获取指定方法的应用程序非常有用。本文将介绍如何使用反射 API 获取方法对象。

获取指定类中的方法

使用 Class 类的 getMethodgetDeclaredMethod 方法可以获取到指定类中的公有方法或者私有方法。两者的区别在于,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 类中的 getParameterTypesgetReturnType 方法可以获取到方法的参数类型和返回类型。代码示例如下:

Class<?>[] parameterTypes = method.getParameterTypes();  // 获取方法的参数类型数组
Class<?> returnType = method.getReturnType();  // 获取方法的返回类型
调用方法

有了方法对象后,我们可以使用 Method 类中的 invoke 方法调用该方法,具体用法如下:

Object result = method.invoke(instance, args);  // 调用方法

其中,instance 是实例对象,如果要调用类方法,则 instance 可以为 nullargs 是方法的参数数组,如果方法没有参数,则 args 可以为 null。当方法有多个参数时,args 应该为一个 Object[] 数组,数组元素为每个参数的值。result 是方法的返回值,如果方法没有返回值,则 result 的值为 null