java switch enum对象_JAVA 中 Switch引用Enum问题

首先我们定义一个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 getEnumByType(Integer code,Class 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;

}

讲解完毕,不理解请留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值