工厂模式枚举共通类

前言

使用 工厂模式根据传入参的类名,获取下拉框数据 。

1. 枚举接口

package com.cj.entity.enums;

public interface BaseEnum<T> {
     String getCode();
     String getValue();
}

2. 普通枚举类

所有的普通的枚举类:
1.必须在包 com.cj.entity.enums.general下
2.必须实现BaseEnum接口

package com.cj.entity.enums.general;
import com.com.cj.entity.enums.BaseEnum;
import org.apache.poi.ss.formula.functions.T;
/**
 * 测试状态
 */
public enum TestState implements BaseEnum<T> {
    UN_TEST("unTest","待分析"),
    FINISH("finish","完成");
  
    private String code;

    private String value;

    TestState (String code, String value) {
        this.code=code;
        this.value=value;
    }
    @Override
    public String getCode() {
        return code;
    }
    @Override
    public String getValue() {
        return value;
    }
}

3. MyEnumUtil工具类

package com.cj.util.Enums;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ReflectUtil;
import com.cj.entity.LabelValueBean;
import com.cj.entity.enums.BaseEnum;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 枚举工具类
 */
public class MyEnumUtil {
    public static <T extends BaseEnum<?>> T getByCode(String code, Class<T> enumClass) {
        // 通过反射取出Enum所有常量的属性值
        for (T each : enumClass.getEnumConstants()) {
            // 利用code进行循环比较,获取对应的枚举
            if (each.getCode().equals(code)) {
                return each;
            }
        }
        return null;
    }

    public static <T extends BaseEnum<?>> T getByValue(String value, Class<T> enumClass) {
        // 通过反射取出Enum所有常量的属性值
        for (T each : enumClass.getEnumConstants()) {
            // 利用code进行循环比较,获取对应的枚举
            if (each.getValue().equals(value)) {
                return each;
            }
        }
        return null;
    }

    public static <T extends BaseEnum<?>> List<LabelValueBean> allLabelValues(Class<T> enumClass) {
        return ListUtil.toList(enumClass.getEnumConstants()).stream()
                .map(value -> new LabelValueBean(value.getValue(), value.getCode())).collect(Collectors.toList());
    }

    public static List<Object> getFieldValues(Class<? extends Enum<?>> clazz, String fieldName) {
        final Enum<?>[] enums = clazz.getEnumConstants();
        if (null == enums) {
            return null;
        }
        final List<Object> list = new ArrayList<>(enums.length);
        for (Enum<?> e : enums) {
            list.add(ReflectUtil.getFieldValue(e, fieldName));
        }
        return list;
    }

    public static <T extends BaseEnum<?>> List<String> allCodes(Class<T> enumClass) {
        return ListUtil.toList(enumClass.getEnumConstants()).stream()
                .map(value ->  value.getCode()).collect(Collectors.toList());
    }

    public static <T extends BaseEnum<?>> List<Object>  allValues(Class<T> enumClass) {
        return ListUtil.toList(enumClass.getEnumConstants()).stream()
                .map(value -> value.getValue()).collect(Collectors.toList());
    }
}

4. 根据枚举名,获取下拉框数据

package com.cj.service.impl.common;
import cn.hutool.core.util.ClassUtil;
import com.cj.entity.LabelValueBean;
import com.cj.entity.enums.BaseEnum;
import com.cj.service.common.GlobalCommonService;
import com.cj.util.Enums.MyEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
@Transactional
public class GlobalCommonServiceImpl implements GlobalCommonService {
    @Override
    public Map<String, Object> getDropDownBoxData(String className, String[] ignoreFieldName) {
        Map<String, Object> data = new LinkedHashMap<String, Object>();
        Set<Class<?>> classSet = ClassUtil.scanPackageBySuper("com.cj.entity.enums.general", BaseEnum.class);
        Optional<Class<?>> enumOptional = classSet.stream()
                .filter(cls -> ClassUtil.getClassName(cls, true).equals(className)).findFirst();
        if (enumOptional.isPresent()) {
            Class enumClass = enumOptional.get();
            List<LabelValueBean> dropDownBoxData = MyEnumUtil.allLabelValues(enumClass);
            if(ignoreFieldName!=null){
                List<String> ignoreFieldNameList = Arrays.asList(ignoreFieldName);
                dropDownBoxData=dropDownBoxData.stream().filter(bean->!ignoreFieldNameList.contains(bean.getValue())).collect(Collectors.toList());
            }
            if (dropDownBoxData.size() > 0) {
                data.put("enumOptions", dropDownBoxData);
            }
        }
        return data;
    }
}

5. 下拉框数据类

package com.cj.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * 下拉框数据结构
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LabelValueBean implements Comparable{
    Object label;
    Object value;
    // 实现 Comparable 接口的抽象方法,定义排序规则
    @Override
    public int compareTo(Object o){
        LabelValueBean bean = (LabelValueBean)o;
        // 升序排列,反之降序
        return String.valueOf(this.label).compareTo(String.valueOf(bean.label));
    }
    //重写equals
    @Override
    public boolean equals(Object o){
        if(o instanceof LabelValueBean){
            if(this.value == ((LabelValueBean)o).value){
                return true;
            }
        }
        return false;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值