0
点赞
收藏
分享

微信扫一扫

枚举的应用


枚举应用场景大部分是管理 状态、异常

在管理状态时,总要维护对应的值,这个值基本上是数值 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;
}

你要问我为什么这么做,增加这么多代码。

我觉得 这样对业务本身的实体、枚举 内部的代码是有所减少的。谁不喜欢光着身子的,这样一目了然,可读性更强。

举报

相关推荐

枚举应用

0 条评论