匿名内部类中不允许使用Java continue语句

问题描述 投票:-2回答:2

我正在线程耗费for循环并在N个线程内执行它们。 continue语句抛出错误

获取错误“继续不能在循环外使用”

for (final Message m : messagelistholder.getMessage()) {
    Callable<Void> tasksToExecute = new Callable<Void>() {
        public Void call() {


            if (guidanceonly1 == true && !QuoteUtil.isECPQuote(list.get(0))) {
                String msg = "Message From " + m.getSource() + " when retrieving Guidance values: "
                        + m.getDescription();
                String lcladdStatusMessages = CommonUtil.getLoclizedMsg(
                        "PRCE_LNE_ITM_MSG_FRM_WHN_RETRVNG_GUIDNCE_VAL",
                        new String[]{m.getSource(), m.getDescription()}, msg);
                list.get(0).addStatusMessages("Info", lcladdStatusMessages);
            } else if ("Error".equalsIgnoreCase(m.getSeverity())) {
                if (m.getCode().indexOf("_NF") > 0) {
                    continue; // price not found due to private sku
                }
                if ("Eclipse".equalsIgnoreCase(m.getSource())) {
                    String msg1 = "Please check Sold To customer data. ";
                    String lcladdStatusMessages1 = CommonUtil
                            .getLoclizedMsg("PRCE_LNE_ITM_PLS_CHK_SLDTO_CUST_DTA", null, msg1);
                    String msg2 = "Discount information may not be returned from Optimus due to "
                            + m.getSeverity() + " From " + m.getSource() + " " + m.getDescription();
                    String lcladdStatusMessages2 = CommonUtil.getLoclizedMsg(
                            "PRCE_LNE_ITM_DSCNT_INFO_MNT_RTRND_FRM_OPTMS_DUETO_FRM",
                            new String[]{m.getSeverity(), m.getSource(), m.getDescription()}, msg2);
                    list.get(0).addStatusMessages(m.getSeverity(),
                            (m.getDescription().contains("MDCP") ? lcladdStatusMessages1 : "")
                                    + lcladdStatusMessages2);
                } else {

                    if (response1.getItems() == null) {
                        String lcladdStatusMessages = CommonUtil.getLoclizedMsg("PRCE_LNE_ITM_OPTMS_ERR",
                                new String[]{m.getSource(), m.getDescription()}, m.getDescription());
                        list.get(0).addStatusMessages("Error", lcladdStatusMessages);
                        list.get(0).setOptimusError(true);
                    } else {
                        if (!QuoteUtil.isECPQuote(list.get(0))) {
                            String lcladdStatusMessages = CommonUtil.getLoclizedMsg(
                                    "PRCE_LNE_ITM_MSG_FRM_WHN_RETRVNG_GUIDNCE_VAL",
                                    new String[]{m.getSource(), m.getDescription()},
                                    "Message From " + m.getSource() + " " + m.getDescription());

                            list.get(0).addStatusMessages("Info", lcladdStatusMessages);
                            list.get(0).setOptimusError(true);
                        }
                    }
                }
            }
            if (list.get(0).getFlags().get(QtFlagType.ESCALATIONFORPARTNER) != null) {
                list.get(0).getFlags().get(QtFlagType.ESCALATIONFORPARTNER).setFlgVl(null);
            }
            if (m.getCode() != null) {
                String pricingServiceMsgCode = m.getCode();
                String pricingServiceSeverity = m.getSeverity();
                Map<Integer, AutoEscalationScenario> categoryMap;

                if (StringUtils.equals("ERROR", pricingServiceSeverity)) {
                    categoryMap = getScenario("SEVERITY", globalAccount1, null, true, null);
                    if (categoryMap.size() != 0) {
                        finalCategorylist.get(0).putAll(categoryMap);
                    }
                }
                if (partnerExclusivityAutoEscalation1) {
                    categoryMap = getScenario(pricingServiceMsgCode, globalAccount1, null, true, null);
                    if (categoryMap != null && categoryMap.size() != 0) {
                        finalCategorylist.get(0).putAll(categoryMap);
                    }
                }
            }


            return null;
        }

    };
    runnableTasks.add(tasksToExecute);
}

有人可以帮助我跳过指定条件的特定循环但不使用continue语句,因为它抛出错误。

java continue
2个回答
1
投票

发生的事情是你实际上是在循环之外调用continue,因为call()函数本身没有for循环,所以如果只是从循环调用call()并不重要。你可以做些什么来解决这个问题,使得call函数返回一个布尔值,并将continue替换为return,如果没有返回true,则返回false。然后更换:

 call()

在循环上

if(call()) continue

0
投票

所以我并不是说我完全理解你的代码,但看起来你正在使用continue来突破那个线程。在普通的多线程应用程序中,看起来您正在从一个循环启动多个线程。 continue调用在新线程内,而不是循环。一旦你开始编写call()方法,你就离开循环来运行它。看看代码,我会尝试用continue替换return。通常我会在我建议之前尝试自己运行它,但如果没有剩下的代码,我无法验证它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.