项目中枚举类怎么设置

本篇文章将介绍:

  1. 枚举类存在的意义
  2. 魔法值不能存在的原因
  3. 枚举类的设置
  4. 枚举类的使用注意事项
  5. 枚举类的存放位置

枚举类存在的意义就是防止程序中出现魔法值,魔法值就是一些写死的值举个例子:

user.setAge("23");

其中的23就是魔法值,

魔法值不能存在的原因:

魔法数值使代码的可读性大大下降

具体原因请查看:

https://blog.csdn.net/qq_39929929/article/details/82924887

下面说下枚举类的设置 

枚举类中设置的String  类型的key和String 类型的value

也有的是设置的是String类型的name 和Integer类型的value

先说第一种设置

如果设置的枚举属性都是String类型,那么,可能数据库库中对应的存储字段是varchar类型

那么在设置的枚举类中key值就是要存储到数据库中的值,那么在写业务代码时要进行相应的转换

设置默认值的时候
po.setDataSource(ProductDataSourceEnum.MDM.getKey());
前端传相应的值时需要做转换
po.setDataSource(ProductDataSourceEnum.getNameByValue(query.getDataSource()));

存储到数据库中

value表示在前端页面上显示的值,它是对key值意义的描述,所以在向前端展示数据的时候对应的字段我们也要做相应的转换

vo.setDataSource(ProductDataSourceEnum.getValueByName(po.getDataSource));

第一种的枚举类 设置

package com.deepexi.product.enums.product;

import com.deepexi.product.enums.certificate.SignStatusEnum;
import org.apache.commons.lang.StringUtils;

import java.util.Objects;

/**
 * @Author xiang
 * @CreatTime 2020/6/24
 * @Describe
 */
public enum ProductDataSourceEnum {

    MDM("MDM","MDM下发");

    public String key;
    public String value;

    ProductDataSourceEnum(String key, String value) {
        this.key = key;
        this.value = value;

    }

    public String getKey() {
        return key;
    }

    public String getValue() {
        return value;
    }

    /**
     * 根据值返回名称
     */
    public static String getNameByValue(String value) {
        SignStatusEnum[] arr = SignStatusEnum.values();
        for (SignStatusEnum e : arr) {
            if (value.equals(e.getValue())) {
                return e.getKey();
            }
        }
        return "";
    }

    public static String getValueByName(String name) {
        SignStatusEnum[] arr = SignStatusEnum.values();
        for (SignStatusEnum e : arr) {
            if (name.equals(e.getKey())) {
                return e.getValue();
            }
        }
        return null;
    }

    public static Boolean isHasValue(String value) {
        if (Objects.isNull(value)) {
            return false;
        }
        if (StringUtils.isBlank(getNameByValue(value))) {
            return false;
        }
        return true;
    }

    public static Boolean isHasName(String name) {
        if (StringUtils.isBlank(name)) {
            return false;
        }
        if (Objects.isNull(getValueByName(name))) {
            return false;
        }
        return true;
    }
}

第二种枚举类设置

package com.deepexi.product.enums.product;

import org.apache.commons.lang.StringUtils;

import java.util.Objects;

public enum ValidEnum {
    START("使用中", 1),
    STOP("停用中", 0);

    private String name;
    private Integer value;

    ValidEnum(String name, Integer value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }


    public Integer getValue() {
        return value;
    }


    /**
     * 根据值返回名称
     */
    public static String getNameByValue(Integer value) {
        if (Objects.isNull(value)) {
            return "";
        }
        ValidEnum[] arr = ValidEnum.values();
        for (ValidEnum e : arr) {
            if (value.equals(e.getValue())) {
                return e.getName();
            }
        }
        return "";
    }

    public static Integer getValueByName(String name) {
        if (Objects.isNull(name)) {
            return null;
        }
        ValidEnum[] arr = ValidEnum.values();
        for (ValidEnum e : arr) {
            if (name.equals(e.getName())) {
                return e.getValue();
            }
        }
        return null;
    }

    public static Boolean isHasValue(Integer value) {
        if (Objects.isNull(value)) {
            return false;
        }
        return StringUtils.isNotBlank(getNameByValue(value));
    }

    public static Boolean isHasName(String name) {
        return StringUtils.isNotBlank(name) && !Objects.isNull(getValueByName(name));
    }
}

针对这种设置就是数据库中对应的字段就是int/bigint/tinyint这些类型

value就是对应数据库中存储的字段,是将value的值存储到数据库中

name就是对value值的描述,是展示在前端页面的

存储到数据库中做的转换

前端传相应的值的时候做的转换 
po.setValidLabel(ValidEnum.getValueByName(query.getValidLabel));
或者是设置默认值的时候
po.setValidLabel(ValidEnum.START.getValue());

同样 在向展示前端数据的时候做出相应的转换

    vo.setValidLabel(ValidEnum.getNameByValue(po.getValidLabel));

如果枚举类中有字段是Integer类型的时候一般是从1开始递增,除非设置的枚举是描述yes,no或者是停止,开启这些设置时从0开始

枚举类存放的位置

一般项目都分为xxx-api,xxx-provider

枚举类一般都放在xxx-provider项目的指定位置,而api中的枚举则是专门对api接口提供的仅仅是接口而不是service层,也就是说只有api接口中需要用到转换时枚举类才放到api中.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值