ReflectUtils 反射工具类

一、工具类代码

继承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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syfjava

请博主喝杯蜜雪冰城

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值