概述
为什么80%的码农都做不了架构师?>>>
首先我们定义一个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;
}
讲解完毕,不理解请留言。
转载于:https://my.oschina.net/linwl/blog/1816943
最后
以上就是年轻滑板为你收集整理的JAVA 中 Switch引用Enum问题的全部内容,希望文章能够帮你解决JAVA 中 Switch引用Enum问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复