枚举类在switch...case语句中使用的问题
2017-11-07 16:51
246 查看
问题记录:
在开发过程当中,需要对一个Integer的值进行switch操作,case的值是枚举类型的retCode属性(该属性为Integer类型),编译器报错case expressions must be constant expressions。
问题分析:
switch...case语句的case后面的值必须为常量,因为switch在编译的时候需要确保case里面的值必须不能相同。
比如不能出现:
case 5:
case 5:
这种情况。所以case里面的变量必须声明成final类型,并且不能相同。
问题解决:
解决思路:根据需要switch的值获取对应具体的枚举类,对获取到的枚举类进行switch...case。
在TransactType枚举类中定义一个方法:
在开发过程当中,需要对一个Integer的值进行switch操作,case的值是枚举类型的retCode属性(该属性为Integer类型),编译器报错case expressions must be constant expressions。
//报错代码: Integer i = 0; switch (i) { case TransactType.TRANSACTTYPE_RECHARGE.getRetCode(): // TODO break; case TransactType.TRANSACTTYPE_CASH.getRetCode(): // TODO break; default: break; }
//枚举类: public static enum TransactType { TRANSACTTYPE_RECHARGE(0,"充值"), TRANSACTTYPE_CASH(1,"提现"), ; private Integer retCode; private String retMsg; TransactType(Integer retCode,String retMsg){ this.retCode = retCode; this.retMsg = retMsg; } public Integer getRetCode() { return retCode; } public String getRetMsg() { return retMsg; } public static TransactType getByValue(Integer value){ for(TransactType transactType : values()){ if (transactType.getRetCode() == value) { return transactType; } } return null; } }
问题分析:
switch...case语句的case后面的值必须为常量,因为switch在编译的时候需要确保case里面的值必须不能相同。
比如不能出现:
case 5:
case 5:
这种情况。所以case里面的变量必须声明成final类型,并且不能相同。
问题解决:
解决思路:根据需要switch的值获取对应具体的枚举类,对获取到的枚举类进行switch...case。
在TransactType枚举类中定义一个方法:
public static TransactType getByValue(Integer value){ for(TransactType transactType : values()){ if (transactType.getRetCode() == value) { return transactType; } } return null; }把报错代码的枚举类使用方式作改变,变成以下代码:
Integer i = 0; switch (TransactType.getByValue(i)) { case TRANSACTTYPE_RECHARGE: // TODO break; case TRANSACTTYPE_CASH: // TODO break; default: break; }至此解决报错问题。
相关文章推荐
- 【练习】题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句
- 实验四第4题:关于switch...case分支语句的使用
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- switch-case语句问题
- 数据库里类switch语句和三元运算符的使用(case)
- 使用Action表驱动代替switch…case语句
- C#有效使用switch case语句
- 在VC中使用switch语句时遇到“error C2360: initialization of 'k' is skipped by 'case' label”的编译错误。
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- switch 语句关于case的使用
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句
- switch语句中case语句中变量初始化问题!
- switch语句中case跳过变量初始化的问题
- 在switch的case语句后,使用UIAlertView报错
- 学会使用switch语句解决实际问题
- 求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- 使用case语句来改善verilog代码中if……else分支过多的问题
- android 打library 库 不能使用switch/case语句
- 每天学习一算法系列(12) (求1+2+…+n,不能使用乘除法,for、while、if 、else、switch、case 等关键字以及条件判断语句)
- MATLAB switch case 语句使用实例源程序