概述
前言
几乎每个系统或多或少都会有些枚举,用来减少硬编码。有时保存数据的时候需要使用下拉框选择枚举,如下图
枚举值 1->GET, 2->POST, 3->PUT, 4->DELETE,而传到后端的是value比如选择GET时,传到后端保存的是1这个值,controller接收的就是Integer类型。
如上图,后端可定义枚举类MethodEnum
/**
* @author meilin.huang
* @version 1.0
* @date 2019-03-23 10:49 AM
*/
public enum MethodEnum {
/**
* get请求方法
*/
GET(1, "GET"),
/**
* post请求方法
*/
POST(2, "POST"),
/**
* put请求方法
*/
PUT(3, "PUT"),
/**
* delete请求方法
*/
DELETE(4, "DELETE");
private Integer value;
private String name;
MethodEnum(Integer value, String name) {
this.value = value;
this.name = name;
}
}
为什么需要一些枚举方法
由于前端传的参数往往都不可控制,比如传个5过来,明明没有5对应的method枚举,但是如果不校验的话,存入数据库,就会造成了无用的数据。此时就可以在MethodEnum中添加一个静态方法来判断5是否为合理合法的枚举状态。
/**
* 判断枚举值是否存在
*/
public static boolean isExist(Integer value) {
if (value == null) {
return false;
}
for (MethodEnum e : values()) {
if (value.equals(e.getValue())) {
return true;
}
}
return false;
}
而controller就需要如下校验:
MethodEnum.isExist(5);
EnumUtils
明显的几乎每个枚举都需要类似的方法,如果每个枚举都写这样的方法就显得太重复了且冗余了。
因此可以定义一个BaseEnum的接口,每个枚举都去继承该接口。
/**
* V:枚举值类型
* @author meilin.huang
* @version 1.0
* @date 2019-03-22 11:04 AM
*/
public interface BaseEnum {
/**
* 获取枚举值
* @returnint
*/
Integer getValue();
/**
* 获取枚举名称
* @return
*/
String getName();
}
上述的MethodEnum只要继承BaseEnum即可
public enum MethodEnum implements BaseEnum
之后就可以使用EnumUtils来统一进行判断,而具体的EnumUtils如下:
/**
* @author meilin.huang
* @version 1.0
* @date 2019-03-22 11:12 AM
*/
public final class EnumUtils {
/**
* 判断枚举值是否存在于指定枚举数组中
* @param enums 枚举数组
* @param value 枚举值
* @return
*/
public static boolean isExist(BaseEnum[] enums, Integer value) {
if (value == null) {
return false;
}
for (BaseEnum e : enums) {
if (value.equals(e.getValue())) {
return true;
}
}
return false;
}
/**
* 根据枚举值获取其对应的名字
* @param enums
* @param value
* @return
*/
public static String getNameByValue(BaseEnum[] enums, Integer value) {
if (value == null) {
return "";
}
for (BaseEnum e : enums) {
if (value.equals(e.getValue())) {
return e.getName();
}
}
return "";
}
}
而在Controller层就可以使用如下方式进行判断:
if (!EnumUtils.isExist(MethodEnum.values(), permission.getMethod())) {
throw new BusinessRuntimeException("权限method错误!");
}
总结
使用枚举工具类可以方便地解决每个枚举类中冗余的代码,不必为每个枚举都写类似的方法,且也可以统一管理这些枚举。
有关更多的使用方式可以关注本人小项目,哈哈哈哈~~~~~~
地址如下: https://gitee.com/objs/mayfly
最后
以上就是疯狂唇膏为你收集整理的java枚举工具类(减少每个枚举中重复的方法)的全部内容,希望文章能够帮你解决java枚举工具类(减少每个枚举中重复的方法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复