【问题标题】:Constant expression required in switch caseswitch case 中需要的常量表达式
【发布时间】:2016-04-26 12:34:50
【问题描述】:

我已经为我的字符串初始化了常量表达式。这里似乎有什么问题?

我得到的错误是“需要常量表达式”。

下面是我的代码,

public class VatCalculator {

    private static int ONBOARD_SALE =1;
    private static int ONBOARD_SERVICE =2;
    private static int PREORDER_SALE =3;
    private static int PREORDER_SERVICE =4;

    private static final Map<String, Integer> serviceMap = new HashMap<String, Integer>();
    static {
        serviceMap.put("onboardSale", ONBOARD_SALE);
        serviceMap.put("onboardService", ONBOARD_SERVICE);
        serviceMap.put("preorderSale", PREORDER_SALE);
        serviceMap.put("preorderService", PREORDER_SERVICE);
    }



public static double calculate(String serviceGroup) {

int type = serviceMap.get(serviceGroup);

switch(type) {
//error at below line
case ONBOARD_SALE:
        //do something

default:break;
    }
}

【问题讨论】:

  • (枚举可能会更好。)

标签: java switch-statement constants


【解决方案1】:

使用这个:

private static final int ONBOARD_SALE = 1;

【讨论】:

  • 我最初使用 final 并且它可以工作,但我不想让它成为 final。还有其他方法吗?
  • 改变逻辑。您不能在 switch 中使用变量,因此您必须具有 final 或值,例如“case 1”。也许您可以创建枚举然后使用它。顺便提一句。 switch 不是 OOP,所以最好找到另一个逻辑。
【解决方案2】:

检查大括号

    public class VatCalculator {

        private static int ONBOARD_SALE =1;
        private static int ONBOARD_SERVICE =2;
        private static int PREORDER_SALE =3;
        private static int PREORDER_SERVICE =4;

        private static final Map<String, Integer> serviceMap = new HashMap<String, Integer>();
        static {
            serviceMap.put("onboardSale", ONBOARD_SALE);
            serviceMap.put("onboardService", ONBOARD_SERVICE);
            serviceMap.put("preorderSale", PREORDER_SALE);
            serviceMap.put("preorderService", PREORDER_SERVICE);
        }


    public static double calculate(String serviceGroup) {

        int type = serviceMap.get(serviceGroup);

        switch(type) {
            //error at below line
            case ONBOARD_SALE:
                    //do something

            default:break;
        }
    }
    } //<-- add like this brace

【讨论】:

  • 这在我的代码中是正确的。我一定是不小心在这里添加了大括号。将编辑它。
猜你喜欢
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2011-04-19
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多