1 摘要
Java 的反射机制可以通过完整的类名路径来获取类、类的属性、类的方法,并且执行对应的方法。在某些项目中,有些类是动态的,需要执行其中的某些特定方法,这时就需要用到 Java 的反射机制来实现。本文将展示基本的 Java 反射操作方法,来实现执行由字符串组成的类名方法名
2 核心代码
./src/main/java/com/ljq/demo/util/ReflectDemo.java
package com.ljq.demo.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @Description: 反射示例
* @Author: junqiang.lu
* @Date: 2020/9/9
*/
public class ReflectDemo {
/**
* 获取结果
*
* @param key
* @return
*/
public String getResult(String key) {
System.out.println("Key: " + key);
return key;
}
/**
* 获取代理类
*
* @param className
* @return
* @throws ClassNotFoundException
*/
public Class getProxyClass(String className) throws ClassNotFoundException {
Class clazz = Class.forName(className);
return clazz;
}
/**
* 获取代理方法
*
* @param methodName
* @param clazz
* @return
* @throws NoSuchMethodException
*/
public Method getProxyMethod(String methodName, Class clazz) throws NoSuchMethodException {
Method method = clazz.getMethod(methodName, String.class);
return method;
}
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
String className = "com.ljq.demo.util.ReflectDemo";
String methodName = "getResult";
String key = "Hello World !!!";
ReflectDemo reflectDemo = new ReflectDemo();
// 获取代理类
Class clazz = reflectDemo.getProxyClass(className);
// 实例化代理类
Object classInstance = clazz.newInstance();
// 获取代理方法
Method method = reflectDemo.getProxyMethod(methodName, clazz);
// 执行代理方法
String result = (String) method.invoke(classInstance, key);
System.out.println("result: " + result);
}
}
3 Github 源码
Gtihub 源码地址 : https://github.com/Flying9001/Demo
个人公众号:404Code,分享半个互联网人的技术与思考,感兴趣的可以关注.