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
方法动态调用它们。注意参数传递的顺序和类型。