【JAVA】根据类名+方法名调用其方法的几种常见方法

代码如下:

package com.***.scheduleTask;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**

  • @Description 演示: 根据类名+方法名来执行方法
  • @Author 最闲程序员
  • @Version 1.0
  • @Date 2019-12-05 14:59
    */

public class TestTask {

String classParam = null;

public void test1() {
    System.out.println("=====方法1");
}

public void test2(String test2Param) {
    System.out.println("=====方法2: test2Param = " + test2Param);
}

public void test3() {
    System.out.println("======方法3: classParam = " + classParam);
}


public static void main(String[] args) {
    Class clazz = null;
        try {
        //根据类名全路径找到class
        String beanClass = "com.***.scheduleTask.TestTask";
        clazz = Class.forName(beanClass);
        //获取所在类的对象
        Object obj = clazz.newInstance();

         //TODO 根据方法名找到方法,并执行方法

        /**
         * 演示方法1: 直接调用方法1
         */
        //获取方法
        Method method1 = clazz.getMethod("test1");
        method1.invoke(obj);

        /**
         * 演示方法2: 给局部参数赋值的方法
         */
        //获取方法
        Method method2 = clazz.getMethod("test2", String.class);
        //第一个参数是该类的对象,后面接着这个方法的形参类型
        method2.invoke(obj, "方法2的参数");


        /**
         * 演示方法3: 给全局变量赋值
         */
        //获取方法
        Method method3 = clazz.getMethod("test3");
        // paramName是类beanClass类中的一个属性
        Field f = clazz.getDeclaredField("classParam");
        f.setAccessible(true);
        // 给classParam赋值
        //第一个参数是该类的对象,后面接着这个是类的全局变量
        f.set(obj, "全局变量");
        method3.invoke(obj);


    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("异常: " + e.getMessage());
    }
}

}


版权声明:本文为Lucky_0804原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。