您的位置:

Java getMethod详解

一、概述

Java getMethod是一个很实用的反射方法,能够获取指定类的指定方法。在一些需要动态调用方法的场景,getMethod可以大展神威,它可以通过字符串动态调用类中的函数。

getMethod的基本语法如下:

public Method getMethod(String name, Class... parameterTypes) throws NoSuchMethodException, SecurityException

其中,name为指定方法名,parameterTypes为被调用函数的参数类型列表,根据这两个参数可以唯一定位一个方法。如果找不到指定的方法,会抛出NoSuchMethodException异常。

二、使用步骤

1、获取方法所属的Class对象

首先需要获取要调用的方法的所在类的Class对象。Class对象可以通过类名获取,也可以通过实例对象获取。

2、获取Method对象

有了Class对象,就可以通过getMethod方法获取指定的Method对象了。

Class clazz = MyClass.class; 
Method method = clazz .getMethod("myMethod");

如果需要获取带参数的方法,则需要在getMethod方法中传递参数类型数组。

Method method = clazz.getMethod("myMethod", String.class, int.class);

3、通过Method对象调用方法

通过Method对象的invoke方法,可以动态地执行指定方法。invoke方法可以接收两个参数,第一个参数为要被调用方法的实例对象(如果该方法是静态的,则为null),第二个参数为要被调用方法的参数列表。

MyClass myObj = new MyClass();
method.invoke(myObj, "hello", 123);

另外,如果要调用静态方法,则第一个参数可以为null。

method.invoke(null, "hello", 123);

三、示例代码

import java.lang.reflect.Method;

public class MyClass {
    
    public void myMethod() {
        System.out.println("调用了无参方法");
    }
    
    public void myMethod(String str, int num) {
        System.out.println("调用了带参数方法,参数为:" + str + ", " + num);
    }
    
    public static void main(String[] args) throws Exception {
        // 获取Class对象
        Class clazz = MyClass.class;
        
        // 获取无参方法
        Method method1 = clazz.getMethod("myMethod");
        method1.invoke(new MyClass());
        
        // 获取带参数的方法
        Method method2 = clazz.getMethod("myMethod", String.class, int.class);
        method2.invoke(new MyClass(), "hello", 123);
    }
}

四、总结

Java getMethod是一个反射方法,可以在运行时通过字符串动态调用类中的函数。通过三个步骤获取要调用的方法,再通过Method对象的invoke方法调用方法。这种动态调用方法的能力可以使程序更加灵活,尤其是在一些需要动态调用方法的场合,为程序员提供了很大的便利。