All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.yangyouwang.core.BaseReflexWrapper Maven / Gradle / Ivy

There is a newer version: 1.8
Show newest version
package io.github.yangyouwang.core;

import io.github.yangyouwang.annotion.Sort;
import io.github.yangyouwang.annotion.Wrapper;
import io.github.yangyouwang.consts.ConfigConsts;

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

/**
 * 反射获取属性值
 * @author yangyouwang
 */
public abstract class BaseReflexWrapper extends BaseWorkerWrapper {

    /**
     * 反射获取注解属性
     * @param obj 对象
     * @return Map
     */
    @Override
    public final Map wrapTheMap(Object obj) {
        Map result = new HashMap<>(16);
        // 获取Field
        Class clazz = obj.getClass();
        Field[] fields = clazz.getDeclaredFields();
        try {
            for (Field field : fields) {
                // 获取字段相关属性
                String fieldName = field.getName();
                field.setAccessible(true);
                String fieldValue = field.get(obj).toString();
                // 非字段
                if (!ConfigConsts.SERIAL_VERSION_UID.equals(fieldName)) {
                    if(field.isAnnotationPresent(Wrapper.class)) {
                        // 获取注解相关属性
                        Wrapper wrapperAnnotation = field.getAnnotation(Wrapper.class);
                        String[] dictData = wrapperAnnotation.dictData();
                        String dictName = wrapperAnnotation.name();
                        // 选择类型
                        BaseReflexWrapper wrapper = FactoryWrapper.createWrapper(wrapperAnnotation.dictType());
                        for (String dict : dictData) {
                            result.putAll(wrapper.wrapTheType(dictName, dict, fieldName, fieldValue));
                        }
                        continue;
                    }
                    if(field.isAnnotationPresent(Sort.class)) {
                        CachePool.FIELD_NAME_QUEUE.offer(fieldName);
                    }
                    result.put(fieldName, fieldValue);
                }
            }
            return result;
        } catch (IllegalAccessException e) {
            throw new RuntimeException("没有访问权限.");
        } catch (NullPointerException e) {
            throw new RuntimeException("空指针异常了.");
        }
    }

    /**
     * wrapper类型
     * @param dictName 字典名称
     * @param dictData 字典数据
     * @param fieldName 属性
     * @param fieldValue 值
     * @return 包装Map
     */
    protected abstract Map wrapTheType(String dictName, String dictData, String fieldName, String fieldValue);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy