1. 问题描述
今天在写Java switch case语句的时候,有一句代码引起Eclipse黄色警告:The label NO_TRADE is never explicitly referenced。
原代码如下:
switch (tradeStatus) {
case CREATE:
NO_TRADE:
result.setCommonStatus(CommonStatus.UNPAY);
result.setActionButtons(Lists.newArrayList(getTradeButton("付款")));
break;
case SHIP:
result.setCommonStatus(CommonStatus.ACCEPTED);
result.setActionButtons(Lists.newArrayList(getTradeButton("确认服务")));
break;
case SUCCESS:
result.setCommonStatus(CommonStatus.FINISH);
result.setActionButtons(Lists.newArrayList(getTradeButton("评价")));
break;
default:
break;
}
告警的是“NO_TRADE:”这行,告警的意思是次标签将永远不会被明确引用。
2. 原因分析
后来自己又看了下代码及Java switch case的语法,原因是自己错误使用了语法,这种写法在Java语法中只会匹配CREATE这一种情况,后面的NO_TRADE是永远不会考虑的。
3. 解决方法
只需要对NO_TRADE这个Label新增一个case标记即可,修改后的代码如下所示:
TradeStatus tradeStatus = TradeStatus.getByValue(searchDO.getTbMainOrderPayStatus().get(0).intValue());
switch (tradeStatus) {
case CREATE:
case NO_TRADE:
result.setCommonStatus(CommonStatus.UNPAY);
result.setActionButtons(Lists.newArrayList(getTradeButton("付款")));
break;
case SHIP:
result.setCommonStatus(CommonStatus.ACCEPTED);
result.setActionButtons(Lists.newArrayList(getTradeButton("确认服务")));
break;
case SUCCESS:
result.setCommonStatus(CommonStatus.FINISH);
result.setActionButtons(Lists.newArrayList(getTradeButton("评价")));
break;
default:
break;
}