The label NO_TRADE is never explicitly referenced

阅读更多

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;
            }

 

 

你可能感兴趣的:(Java,switch)