invoke 方法用于在 Java 中动态调用方法。它的参数传递规则如下:
null。第二个及之后的参数:要传递给被调用方法的参数。这些参数应按照被调用方法声明的顺序和类型传递。如果被调用方法没有参数,那么只需传递一个空的 Object 数组即可。以下是一个简单的示例:
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class InvokeExample { public static void main(String[] args) { MyClass obj = new MyClass(); Class<?> clazz = obj.getClass(); try { // 调用无参数的实例方法 Method method1 = clazz.getMethod("instanceMethod"); method1.invoke(obj); // 调用带参数的实例方法 Method method2 = clazz.getMethod("instanceMethodWithParams", String.class, int.class); method2.invoke(obj, "Hello", 42); // 调用无参数的静态方法 Method method3 = clazz.getMethod("staticMethod"); method3.invoke(null); // 调用带参数的静态方法 Method method4 = clazz.getMethod("staticMethodWithParams", String.class, int.class); method4.invoke(null, "World", 100); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } }}class MyClass { public void instanceMethod() { System.out.println("Instance method called"); } public void instanceMethodWithParams(String str, int num) { System.out.println("Instance method with params called: " + str + ", " + num); } public static void staticMethod() { System.out.println("Static method called"); } public static void staticMethodWithParams(String str, int num) { System.out.println("Static method with params called: " + str + ", " + num); }}在这个示例中,我们使用反射获取了 MyClass 类的方法,并使用 invoke 方法动态调用它们。注意参数传递的顺序和类型。


