commons-lang3的反射工具类之MethodUtils(1)

    上一篇我们介绍了通过ConstructorUtils类来创建实例,今天我们来讲解下MethodUtils怎样调用静态方法和非静态方法,以及对比java反射调用静态方法和非静态方法。熟悉java反射的同学们,看到下边的例子会更加体会到这个类的好处。

MethodUtils

    该类是调用对象方法的工具类。

 

怎样调用静态方法

    我们拿Integer#max的静态方法来举例,max方法是静态方法,取两个数的最大数。

代码示例

package MethodUtilsTest;

import org.apache.commons.lang3.reflect.MethodUtils;

public class InvokeStaticMethodTest {

    public static void main(String[] args) throws Exception {

        // java反射实现方法调用
        System.err.println(Integer.class.getMethod("max", int.class, int.class).invoke(null, 1, 2));

        // MethodUtils.invokeMethod实现方法调用
        System.err.println(MethodUtils.invokeStaticMethod(Integer.class, "max", 1, 2));
    }

}

执行结果

2
2

    通过例子,我们看出,MethodUtils#invokeStaticMethod方法比传统的java反射方法的写法更加简洁。

 

怎样调用非静态方法

    我们使用String类的equals方法和equalsIgnoreCase来举例

代码示例

package MethodUtilsTest;

import org.apache.commons.lang3.reflect.MethodUtils;

public class InvokeMethodTest {

    public static void main(String[] args) throws Exception {

        // java反射实现方法调用
        String equals = "iosoft2020";
        System.err.println(String.class.getMethod("equals", Object.class).invoke(equals, "IOSOFT2020"));

        // MethodUtils.invokeMethod实现方法调用
        String equalsIgnoreCase = "iosoft2020";
        System.err.println(MethodUtils.invokeMethod(equalsIgnoreCase, "equalsIgnoreCase", "IOSOFT2020"));

    }

}
 

执行结果

false
true

    

注意点

    和ConstructorUtils#invokeConstructor方法一样,MethodUtils下的方法只能调用public的方法,否则会抛出异常

 

    我们在写框架或者共通方法时会用到这些方法,下篇我们会讲解下FieldUtils。

你可能感兴趣的:(apache工具类,java,反射)