Javaswitchcase枚举enum报错:caseexpressionsmustbec。。。
Java switch case 枚举enum报错:case expressions must be constant expressionsC
1. 问题描述
今天在代码中想对Java switch case 和枚举类型Enum对象进⾏联合使⽤,但发现有Eclipse中异常提⽰信息:case expressions must be constant expressions,导致编译始终过不去。
枚举类型定义如下:
Java代码 收藏代码
public enum TradeStatus {
CLOSE(-1, “已关闭”), NO_TRADE(0, “未创建”), CREATE(1, “拍下”), PAY(2, “已付款”), SHIP(3, “已发货”), SUCCESS(4,“已完成”);
private int value;
private String name;
private TradeStatus(int value, String name) {
this.setValue(value);
this.setName(name);
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
java switch case stringpublic String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static TradeStatus getByValue(int value) {
for (TradeStatus tradeStatus : values()) {
if (Value() == value) {
return tradeStatus;
}
}
return null;
}
}
使⽤代码⼊下:
Java代码 收藏代码
private String getStatusDesc(Integer tradeStatus) {
switch(tradeStatus){
case Value() :
break;
default:
break;
}
return “交易状态”;
}
2. 原因分析
本意是想对tradeStatus值进⾏分类过滤,但由于 Value() 返回值是⼀个变量不符合Java switch case的语法,导致报错。
接下来修改了代码,如下:
Java代码 收藏代码
private String getStatusDesc(Integer tradeStatus) {
switch (ByValue(tradeStatus)) {
case OrderInfoSearchDO.TradeStatus.CREATE:
break;
default:
break;
}
return “交易状态”;
}
但Eclipse继续提⽰错误信息:The qualified case label TradeStatus.CREATE must be replaced with the unqualified enum constant CREATE。。。
百思不得其解。
3. 问题解决
把枚举常量前的冗余类信息去掉即可,如下所⽰:
Java代码 收藏代码
private String getStatusDesc(Integer tradeStatus) {
switch (ByValue(tradeStatus)) {
case CREATE:
break;
default:
break;
}
return “交易状态”;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论