Java 中switch case 枚举值使用报错:case expressions must be constant expressions

1. 工作中碰到的问题

    Java switch case 和枚举类型Enum对象进行联合使用,发现Eclipse中异常提示信息:case expressions must be constant expressions,导致编译失败。


枚举类型定义

public enum FreqCappingType
{
	MediaBuy(1), Campaign(2),SellStrategy(3),SellCampaign(4);

	private int val;

	FreqCappingType(int val)
	{
		this.val = val;
	}

	public int getVal()
	{
		return val;
	}
	public static FreqCappingType convertFrom(int val)
	{
		switch (val)
		{
			case 1:
				return MediaBuy;
			case 2:
				return Campaign;
			case 3:
				return SellStrategy;
			case 4:
				return SellCampaign;
		}
		return null;
	}
}


2. 解决方法

    
  switch (FreqCappingType.convertFrom(capRecord.getType())) {
  case MediaBuy:
      if (!buyStrategyMap.containsKey(capRecord.getId())) {
        capRecords.remove(capRecord);
        i--;
        continue;
        }
      break;
 case Campaign:

3. 分析

 

       由于 FreqCappingType.MediaBuy.getVal() 返回值是不确定的值,不符合Java switch case的语法必须为常量,导致报错。


红色标记MediaBuy不要写为FreqCappingType.MediaBuy(否则,继续报错The qualified case label FreqCappingType.MediaBuymust be replaced with the unqualified enum constant MediaBuy)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值