利用EnumTools减少枚举中重复的方法
汪小哥的博客
https://blog.csdn.net/u012881904/article/details/104763791?spm=1001.2014.3001.5501
使用效果DEMO
public static void main(String[] args) {
//获取msg
String success = EnumCodeMsgUtils.getEnumMsgByCode(TaskStatusEnumsTwo.class, "success", "");
log.info("msg:"+success);
//获取是否存在
boolean validEnumCode = EnumCodeMsgUtils.isValidEnumCode(TaskStatusEnumsTwo.class, "success");
log.info("validEnumCode:"+validEnumCode);
//获取msg的信息
Optional<TaskStatusEnumsTwo> codeEnum = EnumCodeMsgUtils.getEnumByCode(TaskStatusEnumsTwo.class, "success");
codeEnum.ifPresent(taskStatusEnumsTwo -> log.info("getEnumByCode:" + taskStatusEnumsTwo.getCode() + taskStatusEnumsTwo.getEnumMsg()));
}
EnumUtils
package com.wangji92.github.study.other.enums.enhance;
import org.apache.commons.lang3.EnumUtils;
import java.util.Objects;
import java.util.Optional;
/**
* 枚举处理工具类
*
* @author 汪小哥
* @date 09-03-2020
*/
public class EnumCodeMsgUtils extends EnumUtils {
/**
* 根据code 获取到当前的枚举
*
* @param enumClass
* @param code
* @param <E>
* @param <T>
* @return
*/
public static <E extends Enum<E> & EnumCodeMsg<T>, T> Optional<E> getEnumByCode(Class<E> enumClass, T code) {
if (code == null) {
return Optional.empty();
}
for (E enumConstant : enumClass.getEnumConstants()) {
if (Objects.equals(enumConstant.getCode(), code)) {
return Optional.of(enumConstant);
}
}
return Optional.empty();
}
/**
* 根据code 获取到枚举的msg的信息
*
* @param enumClass
* @param code
* @param defaultMsg 默认返回值
* @param <E>
* @param <T>
* @return
*/
public static <E extends Enum<E> & EnumCodeMsg<T>, T> String getEnumMsgByCode(Class<E> enumClass, T code, String defaultMsg) {
Optional<E> enumByCode = EnumCodeMsgUtils.getEnumByCode(enumClass, code);
if (enumByCode.isPresent()) {
return enumByCode.get().getEnumMsg();
}
return defaultMsg;
}
/**
* 根据code 获取到枚举的msg的信息,默认返回为空
* @param enumClass
* @param code
* @param <E>
* @param <T>
* @return
*/
public static <E extends Enum<E> & EnumCodeMsg<T>, T> String getEnumMsgByCode(Class<E> enumClass, T code) {
return EnumCodeMsgUtils.getEnumMsgByCode(enumClass,code,"");
}
/**
* 这个是否是一个有效的code
*
* @param enumClass
* @param code
* @param <E>
* @param <T>
* @return
*/
public static <E extends Enum<E> & EnumCodeMsg<T>, T> boolean isValidEnumCode(Class<E> enumClass, T code) {
Optional<E> enumByCode = EnumCodeMsgUtils.getEnumByCode(enumClass, code);
return enumByCode.isPresent();
}
}
code,msg接口分别定义
- 表示具有code和msg能力
- java类不能多继承,用接口表示
package com.wangji92.github.study.other.enums.enhance;
import java.io.Serializable;
/**
* @author 汪小哥
* @date 09-03-2020
*/
public interface EnumCode<T> extends Serializable {
/**
* 获取枚举的返回Code
*
* @param <T>
* @return
*/
T getCode();
}
/**
* 枚举的返回msg的信息
*
* @author 汪小哥
* @date 09-03-2020
*/
public interface EnumCodeMsg<T> extends EnumCode<T> {
/**
* 获取枚举的备注信息
* @return
*/
String getEnumMsg();
}
/**
* @author 汪小哥
* @date 09-03-2020
*/
@Slf4j
public enum TaskStatusEnumsTwo implements EnumCodeMsg<String> {
SUCCESS("success", "成功"),
FAIL("fail", "失败"),
CANCEL("cancel", "取消");
private String code;
private String msg;
TaskStatusEnumsTwo(String code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public String getEnumMsg() {
return msg;
}
@Override
public String getCode() {
return code;
}
}

浙公网安备 33010602011771号