一、工具类代码
继承hutool 包的 ReflectUtil 反射工具类,只要方法有:
- 获取构造方法
- 关于字段的操作(获取字段名称、 修饰符、 值)
- 关于公共方法的操作
- 实例化
- 判断方法属性
- 执行方法
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ReflectUtils extends ReflectUtil {
private static final String SETTER_PREFIX = "set";
private static final String GETTER_PREFIX = "get";
/**
* 调用Getter方法.
* 支持多级,如:对象名.对象名.方法
*/
@SuppressWarnings("unchecked")
public static <E> E invokeGetter(Object obj, String propertyName) {
Object object = obj;
for (String name : StringUtils.split(propertyName, ".")) {
String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name);
object = invoke(object, getterMethodName);
}
return (E) object;
}
/**
* 调用Setter方法, 仅匹配方法名。
* 支持多级,如:对象名.对象名.方法
*/
public static <E> void invokeSetter(Object obj, String propertyName, E value) {
Object object = obj;
String[] names = StringUtils.split(propertyName, ".");
for (int i = 0; i < names.length; i++) {
if (i < names.length - 1) {
String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]);
object = invoke(object, getterMethodName);
} else {
String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]);
Method method = getMethodByName(object.getClass(), setterMethodName);
invoke(object, method, value);
}
}
}
}
二、测试反射获取属性、属性值等
package com.ruoyi.demo;
import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Filter;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import java.lang.reflect.Field;
/**
* <简述>
* <详细描述>
*
* @author syf
* @date 2024年08月19日 14:59
*/
public class TestReflectUtils {
// Teacher类
static class Teacher{
private String name;
private int age;
}
public static void main(String[] args) {
testReflect();
}
//反射操作
static void testReflect(){
// 获取Teacher类的所有字段
Field[] fields = ReflectUtils.getFields(Teacher.class);
for (Field field :fields) {
Console.log("STAR---------------------------------------------------------------");
Console.log("getFields-获取Teacher类的所有字段:", field);
// 获取字段名
Console.log("getFieldName->获取字段名:",ReflectUtils.getFieldName(field));
// 获取字段值
Console.log("getFieldValue->获取字段值:",ReflectUtils.getFieldValue(new Teacher(),field));
// 获取字段修饰符
Console.log("getModifiers->获取字段修饰符:",field.getModifiers());
// 获取字段类型
Console.log("getType->获取字段类型:",field.getType());
Console.log("END---------------------------------------------------------------\n");
}
Console.log("STAR---------------------------------------------------------------");
// 获取Teacher类的所有字段,返回age字段
Field[] fields1 = ReflectUtils.getFields(Teacher.class, field -> "age".eq

最低0.47元/天 解锁文章
917

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



