枚举应用场景大部分是管理 状态、异常
在管理状态时,总要维护对应的值,这个值基本上是数值 0-女 1-男
VO传来的值基本上是字串“男”,或者“女”
此时需要我们根据传来的字串确定对应的数值
大多数人基本上使用static创建一个方法,方法中组装一个静态变量map,key-男 value-1,在类的加载过程中将他分配到堆内存
这样的思想在java源码中也有体现,如Integer的IntegerCache()方法,将-128至127的数值存到内存
除了这样的方法,再介绍一种方法。采用spirng的bean方式
package com.zxw.common.core.base.enums.toc;
import lombok.Getter;
import lombok.Setter;
/**
* @author Xuewei.Zhang
* @date 2022/9/16
*/
public enum FileTypeEnum {
FOLDER(0,"文件夹"),
FILE(1,"文件")
;
@Getter
@Setter
private Integer code;
@Getter
@Setter
private String msg;
FileTypeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}
package com.zxw.common.core.base.bean.toc;
import com.zxw.common.core.base.enums.toc.FileTypeEnum;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Xuewei.Zhang
* @date 2022/9/16
*/
@Configuration
public class FlowToCBean {
@Bean("FileTypeEnumBean")
public Map<String, Integer> FileTypeEnumBean() {
Map<String, Integer> map = new ConcurrentHashMap<>();
for (FileTypeEnum fileTypeEnum :FileTypeEnum.values() ){
map.put(fileTypeEnum.getMsg(),fileTypeEnum.getCode());
}
return map;
}
}
package com.zxw.common.core.base.enums;
import lombok.Getter;
/**
* @author Xuewei.Zhang
* @date 2022/7/6
*/
public enum EnumBeanNameEnum {
FlWO("FlowEnumBean"),
FILE_TYPE("FileTypeEnumBean");
EnumBeanNameEnum(String msg) {
this.msg = msg;
}
@Getter
private String msg;
}
package com.zxw.common.web.util;
import com.zxw.common.core.base.enums.EnumBeanNameEnum;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import java.util.Map;
/**
* @author Xuewei.Zhang
* @date 2022/7/5
*/
@Configuration
public class BeanUtils {
private static ApplicationContext applicationContext;
@Resource
public void setApplicationContext(ApplicationContext applicationContext) {
BeanUtils.applicationContext = applicationContext;
}
public static Integer getCodeByMsg(String msg, EnumBeanNameEnum beanNameEnum) {
Map<String, Integer> map = (Map<String, Integer>) applicationContext.getBean(beanNameEnum.getMsg());
return map.get(msg);
}
}
使用
public FilePath add(FilePathVO filePathVO) {
FilePath filePath = new FilePath();
BeanUtil.copyProperties(filePathVO,filePath);
String userAccount = JwtUtils.getUserAccount();
filePath.setUserAccount(userAccount);
//使用
filePath.setFileType(BeanUtils.getCodeByMsg(filePathVO.getFileTypeMsg(),EnumBeanNameEnum.FILE_TYPE));
filePathMapper.insert(filePathVO);
return filePathVO;
}
你要问我为什么这么做,增加这么多代码。
我觉得 这样对业务本身的实体、枚举 内部的代码是有所减少的。谁不喜欢光着身子的,这样一目了然,可读性更强。