当前位置: 首页 > article >正文

反射工具类ReflectUtil

工具类ReflectUtil

package cn.ziqirj.common.utils;

import cn.ziqirj.common.exception.UtilException;
import lombok.Setter;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


/**
 * 反射工具类
 * @author zhangji
 *
 */
public class ReflectUtil<T> {

	@Setter
    private T t;
	private final Class<T> tClass;

	public ReflectUtil(Class<T> tClass) {
		this.tClass = tClass;
	}

	/**
	 * 获取对象实例
	 */
	public T getObject() throws InstantiationException, IllegalAccessException {
		return tClass.newInstance();
	}

	/**
	 * 生成对象
	 * @param map:key属性名->value值
	 * @return T
	 */
	public T getObject(Map<String, Object> map) throws InstantiationException, UtilException, IllegalAccessException{
		Set<String> set = map.keySet();
		T tt = tClass.newInstance();
		for (String key : set) {
			try {
				// 这里必须调用getDeclaredFiedl();
				Field fieldDec = tClass.getDeclaredField(key);
				// 是否取消java的语法检查,因为此变量是私有的,如果不取消则无法赋值
				fieldDec.setAccessible(true);
				Object value = map.get(key);
				fieldDec.set(tt, value);
			} catch (NoSuchFieldException | SecurityException e) {
				throw new UtilException(getObjectPath() + ":" + key + " is not found!", e);
			} catch (IllegalArgumentException | IllegalAccessException e) {
				throw new UtilException("赋值失败!", e);
			} 
		}
		return tt;
	}

	/**
	 * 解析注解:key:"name" ---> value:name值
	 * @param annoStr 注解字符串
	 */
	private Map<String, String> getParamsAnno(String annoStr) throws IllegalArgumentException {
		Map<String, String> map = new HashMap<>();
		annoStr = annoStr.substring(annoStr.indexOf('(')+1, annoStr.length()-1);
		String[] annoStrArr = StringUtils.toArray(annoStr, ",");
        if (annoStrArr != null) {
            for(String str : annoStrArr) {
                String[] strArr = StringUtils.toArray(str, "=");
                if (strArr != null && strArr.length == 2) {
                    map.put(strArr[0].trim(), strArr[1]);
                }
            }
        }
        return map;
	}

	public String getObjectPath() {
		return t.getClass().getName();
	}

}

toArray工具方法

/**
     * 字符串分割为字符串数组
     *
     * @param str 需要分割的字符串
     * @param decollator 分割符, 默认为逗号
     * @return 字符串数组
     */
    public static String[] toArray(String str, String decollator) {
        if(isEmpty(str) || isEmpty(decollator)) {
            return null;
        }

        //需分割的字符串最后一个字符不能为分隔符
        if(str.lastIndexOf(decollator) == str.length() - 1) {
            str = str.substring(0, str.length() - 1);
        }
        if(isEmpty(str) || isEmpty(decollator)) {
            return null;
        }

        //需分割的字符串第一个字符不能为分隔符
        if(str.lastIndexOf(decollator) == 0) {
            str = str.substring(1);
        }
        if(isEmpty(str) || isEmpty(decollator)) {
            return null;
        }

        String[] array;
        if(!str.contains(decollator)) {
            array = new String[1];
            array[0] = str;
        } else {
            array = str.split(decollator);
        }

        return array;
    }

个人博客:紫琪软件工作室


http://www.kler.cn/a/461251.html

相关文章:

  • MySQL 入门大全:运算符
  • 信息学奥赛一本通:1311:【例2.5】求逆序对
  • 大带宽服务器和普通服务器相比较的优势
  • 需求上线,为什么要刷缓存?
  • 碰一碰拓客系统:创新引领智能拓客新纪元
  • 某小程序sign签名参数逆向分析
  • 最近的一些事情
  • 基础算法--滑动窗口
  • 深入理解MVCC:快照读与当前读的原理及实践
  • LLM(十二)| DeepSeek-V3 技术报告深度解读——开源模型的巅峰之作
  • Docker容器日志查看与清理的方法
  • es使用简单语法案例
  • 使用npm包的工程如何引入mapboxgl-enhance/maplibre-gl-enhance扩展包
  • SpringBoot 消息推送之 WebSocket和SseEmitter
  • 如何规范的提交Git?
  • 管理系统中经典审核功能实现
  • 【电机控制】基于STC8H1K28的六步换向——方波驱动(软件篇)
  • 跨年烟花C++代码
  • INT303 Big Data Analytics 笔记
  • 单元测试学习2.0+修改私有属性
  • 用VSCode+远程拉仓库上传Git仓库方法(进阶版)
  • [算法] [leetcode-70] 爬楼梯
  • 8086汇编(16位汇编)学习笔记06.串操作、流程转移指令
  • 《鸿蒙之光HarmonyOS NEXT原生应用开发入门》简介
  • Synopsys软件基本使用方法
  • deepin系统Docker使用指南:常用命令精讲