当前位置:首页 > 编程语言 > Java模式 > 正文内容

Java ReflctUtil

lcpsky1年前 (2023-03-22)Java模式264
//用来将map转为对象类型
package com.lcpsky.common.reflect;

import org.apache.commons.lang3.time.DateUtils;

import java.lang.reflect.Field;
import java.text.ParseException;
import java.util.Date;
import java.util.Map;

public class ReflectUtil {

    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 把source转为target
     *
     * @param source source
     * @param target target
     * @param <T>    返回值类型
     * @return 返回值
     * @throws Exception newInstance可能会抛出的异常
     */
    public static <T> T mapToObj(Map source, Class<T> target) throws Exception {
        Field[] fields = target.getDeclaredFields();
        T o = target.newInstance();
        for (Field field : fields) {
            Object val;
            if ((val = source.get(field.getName())) != null) {
                field.setAccessible(true);
                field.set(o, getValue(val, field.getType()));
            }
        }
        return o;
    }

    private static Object getValue(Object value, Class type) {
        if (value != null) {
            if (type.isAssignableFrom(String[].class))
                return toStringArray(value);
            if (type.isAssignableFrom(Integer[].class))
                return toIntegerArray(value);
            else if (type.isAssignableFrom(Integer.class) || type.isAssignableFrom(int.class))
                return toInteger(value);
            if (type.isAssignableFrom(Double.class) || type.isAssignableFrom(double.class))
                return toDouble(value);
            else if (type.isAssignableFrom(Boolean.class) || type.isAssignableFrom(boolean.class))
                return toBoolean(value);
            else if (type.isAssignableFrom(String.class))
                return toString(value);
            else if (type.isAssignableFrom(Date.class))
                return toDate(value);
        }
        return null;
    }

    private static String[] toStringArray(Object value) {
        return value.toString().split(",");
    }

    private static Integer[] toIntegerArray(Object value) {
        String[] stringArray = toStringArray(value);
        Integer[] intArray = new Integer[stringArray.length];
        for (int i = 0; i < stringArray.length; i++) {
            intArray[i] = Integer.parseInt(stringArray[i]);
        }
        return intArray;
    }

    private static Integer toInteger(Object value) {
        return Integer.parseInt(value.toString());
    }

    private static Double toDouble(Object value) {
        return Double.parseDouble(value.toString());
    }

    private static String toString(Object value) {
        return value.toString();
    }

    private static Date toDate(Object value) {
        try {
            return DateUtils.parseDate(value.toString(), DATE_FORMAT);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    private static Boolean toBoolean(Object value) {
        return Boolean.parseBoolean(value.toString());
    }
}


扫描二维码推送至手机访问。

版权声明:本文由软件技术记录发布,如需转载请注明出处。

本文链接:https://lcpsky.top/?id=43

分享给朋友:
返回列表

上一篇:Java CSV CsvUtil

没有最新的文章了...

“Java ReflctUtil” 的相关文章

Java CSV CsvUtil

<!-- hutool工具包  --> <dependency>     <groupId>cn.hutool</groupId>    &nbs...