当我们使用 Java 反射时,有时需要在运行时动态地调用某个类的方法,例如使用配置文件指定要调用的方法,或者根据用户输入来决定调用哪个方法等。下面我们就来看几个动态调用方法的例子。

  1. 调用无参方法

假设有一个类名为 MyClass,它有一个无参方法 myMethod(),我们想在运行时动态地调用该方法,可以使用反射来实现:

Class clazz = MyClass.class;
Object obj = clazz.newInstance();
Method method = clazz.getMethod("myMethod");
method.invoke(obj);

上述代码中,我们首先获取 MyClass 的 Class 对象,然后使用 newInstance() 方法创建 MyClass 的一个实例,接着使用 getMethod() 方法获取 myMethod 方法的 Method 对象,最后使用 invoke() 方法调用该方法。

  1. 调用带参数方法

假设有一个类名为 MyClass,它有一个带参数方法 myMethod(String str),我们想在运行时动态地调用该方法,并传入参数,可以使用反射来实现:

Class clazz = MyClass.class;
Object obj = clazz.newInstance();
Method method = clazz.getMethod("myMethod", String.class);
method.invoke(obj, "Hello, world!");

上述代码中,我们首先获取 MyClass 的 Class 对象,然后使用 newInstance() 方法创建 MyClass 的一个实例,接着使用 getMethod() 方法获取 myMethod 方法的 Method 对象,最后使用 invoke() 方法调用该方法,并传入参数。

  1. 调用静态方法

假设有一个类名为 MyClass,它有一个静态方法 myStaticMethod(),我们想在运行时动态地调用该方法,可以使用反射来实现:

Class clazz = MyClass.class;
Method method = clazz.getMethod("myStaticMethod");
method.invoke(null);

上述代码中,我们首先获取 MyClass 的 Class 对象,接着使用 getMethod() 方法获取 myStaticMethod 方法的 Method 对象,最后使用 invoke() 方法调用该方法。由于 myStaticMethod 是静态方法,因此我们可以将第一个参数设为 null。

  1. 调用私有方法

假设有一个类名为 MyClass,它有一个私有方法 myPrivateMethod(),我们想在运行时动态地调用该方法,可以使用反射来实现:

Class clazz = MyClass.class;
Object obj = clazz.newInstance();
Method method = clazz.getDeclaredMethod("myPrivateMethod");
method.setAccessible(true);
method.invoke(obj);

上述代码中,我们首先获取 MyClass 的 Class 对象,然后使用 newInstance() 方法创建 MyClass 的一个实例,接着使用 getDeclaredMethod() 方法获取 myPrivateMethod 方法的 Method 对象,由于 myPrivateMethod 是私有方法,因此我们需要调用 setAccessible(true) 方法来允许访问私有方法,最后使用 invoke() 方法调用该方法。

这就是几个动态调用方法的例子。