首先我们定义一个Enum枚举类,用以举例:
- public enum ContentTypeEnum{
- TEXT(0,"文本"),
- VEDIO(1,"视频"),
- LINK(2,"链接"),
- CODE(3,"代码"),
- TITLE(4,"标题"),
- KPOINT(5,"知识点");
-
- //这个枚举有两个变量 code 和 msg
- private Integer code;
- private String msg;
-
- private ContentTypeEnum(Integer code, String msg) {
- this.code = code;
- this.msg = msg;
- }
-
- public Integer getCode() {
- return code;
- }
-
- public String getMsg() {
- return msg;
- }
- }
而我们的项目中有这样的需求:传入对应的code,需要跟枚举中对应元素进行匹配,如何做呢?
开始我是这样写的:
- switch (code) {
- case ContentTypeEnum.TEXT.getCode:
- //校验文本内容不能为空
- if(StringUtils.isEmpty(econtent.getContent())){
- throw new RuntimeException("【addExperimentContent】 文本内容不能为空");
- }
- //文件存放路径不能为空
- if(StringUtils.isEmpty(econtent.getContentPath())){
- throw new RuntimeException("【addExperimentContent】 文件存放路径不能为空");
- }
- break;
- }
但很遗憾,JAVA并不允许我们这样写。我翻阅了JAVA文档,它允许我们这样:传入一个枚举的对象进行匹配,这样是可以的:
-
- //传入一个ContentTypeEnum 枚举的对象进行匹配
- switch (contentTypeEnum) {
- case TEXT:
- //校验文本内容不能为空
- if(StringUtils.isEmpty(econtent.getContent())){
- throw new RuntimeException("【addExperimentContent】 文本内容不能为空");
- }
- //文件存放路径不能为空
- if(StringUtils.isEmpty(econtent.getContentPath())){
- throw new RuntimeException("【addExperimentContent】 文件存放路径不能为空");
- }
- break;
- }
-
-
但是我们拿到的是一个code参数啊,有解决办法吗?当然!解决办法如下:
1.定义一个enum接口,并然具体的enum实现接口:
- public interface CodeEnum {
-
- Integer getCode();
-
- }
- public enum ContentTypeEnum implements CodeEnum{
- TEXT(0,"文本"),
- VEDIO(1,"视频"),
- LINK(2,"链接"),
- CODE(3,"代码"),
- TITLE(4,"标题"),
- KPOINT(5,"知识点");
-
- //这个枚举有两个变量 code 和 msg
- private Integer code;
- private String msg;
-
- private ContentTypeEnum(Integer code, String msg) {
- this.code = code;
- this.msg = msg;
- }
-
- public Integer getCode() {
- return code;
- }
-
- public String getMsg() {
- return msg;
- }
- }
2.定义一个泛型工具类,用于获取具体code(定义泛型是为了方便其他enum也可以使用):
- public class EnumUtils {
-
- public static <T extends CodeEnum>T getEnumByType(Integer code,Class<T> enumClass){
- for(T t:enumClass.getEnumConstants()){
- if(t.getCode().equals(code)){
- return t;
- }
- }
- return null;
- }
-
- }
3.switch引用enum:
- //这里的code是我在实际项目中从其他地方传来的标识,对应枚举中具体的一个元素code。
- switch (EnumUtils.getEnumByType(code,ContentTypeEnum.class)) {
- case TEXT:
- //校验文本内容不能为空
- if(StringUtils.isEmpty(econtent.getContent())){
- throw new RuntimeException("【addExperimentContent】 文本内容不能为空");
- }
- //文件存放路径不能为空
- if(StringUtils.isEmpty(econtent.getContentPath())){
- throw new RuntimeException("【addExperimentContent】 文件存放路径不能为空");
- }
- break;
- }
讲解完毕,不理解请留言。