代码如下:
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());
}
}
}
1万+

被折叠的 条评论
为什么被折叠?



