Инструкция Java continue не разрешена в анонимном внутреннем классе - PullRequest
0 голосов
/ 18 февраля 2019

Я занимаю много времени для цикла 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, поскольку он выдает ошибку.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

То, что происходит, это то, что вы на самом деле вызываете continue вне цикла, потому что сама функция call () не имеет цикла for, поэтому не имеет значения, вызываете ли вы только call () из цикла.Чтобы это исправить, вы можете заставить функцию вызова возвращать логическое значение и заменить продолжения возвращением true и возвращать false, если возвращение true не было достигнуто.Затем замените:

 call()

в цикле (ах) на

if(call()) continue
0 голосов
/ 18 февраля 2019

Так что я не говорю, что полностью понимаю ваш код, но похоже, что вы используете continue для выхода из этого потока.В обычном многопоточном приложении похоже, что вы запускаете несколько потоков из одного цикла.Вызов continue находится внутри нового потока, а не цикла.Как только вы начинаете писать метод call(), вы покидаете цикл для его запуска.Глядя на код, я бы попробовал заменить continue на return.Обычно я пытался запустить его сам, прежде чем предлагать его, но без остальной части кода я не могу проверить, работает ли он.

...