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

匿名内部类中不允许使用Java continue语句,java,continue,Java,Continue,我正在处理一个耗时的for循环,并在N个线程内执行它们。continue语句正在抛出错误 获取错误“无法在循环外部使用Continue” for(最终消息m:messagelistholder.getMessage()){ Callable tasksToExecute=new Callable(){ 公开作废通知(){ if(guidanceonly1==true&&!QuoteUtil.isECPQuote(list.get(0))){ String msg=“检索指导值时来自“+m.get

我正在处理一个耗时的for循环,并在N个线程内执行它们。continue语句正在抛出错误

获取错误“无法在循环外部使用Continue”

for(最终消息m:messagelistholder.getMessage()){
Callable tasksToExecute=new Callable(){
公开作废通知(){
if(guidanceonly1==true&&!QuoteUtil.isECPQuote(list.get(0))){
String msg=“检索指导值时来自“+m.getSource()+”的消息:”
+m.getDescription();
字符串lcladdStatusMessages=CommonUtil.getLoclizedMsg(
“PRCE_LNE_ITM_MSG_FRM_WHN_RETRVNG_GUIDNCE_VAL”,
新字符串[]{m.getSource(),m.getDescription()},msg);
list.get(0).addStatusMessages(“Info”,lcladdStatusMessages);
}else if(“Error”.equalsIgnoreCase(m.getSeverity())){
如果(m.getCode().indexOf(“\u NF”)>0){
继续;//由于专用sku,未找到价格
}
if(“Eclipse.equalsIgnoreCase(m.getSource())){
String msg1=“请检查销售给客户的数据。”;
字符串lcladdStatusMessages1=CommonUtil
.getLocalizeDMSG(“PRCE_LNE_ITM_PLS_CHK_SLDTO_CUST_DTA”),空,msg1);
String msg2=“由于以下原因,Optimus可能无法返回折扣信息”
+m.getSeverity()+”来自“+m.getSource()+”+m.getDescription();
字符串lcladdStatusMessages2=CommonUtil.getLoclizedMsg(
“项目信息、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、预算、,
新字符串[]{m.getSeverity(),m.getSource(),m.getDescription()},msg2);
list.get(0).addStatusMessages(m.getSeverity(),
(m.getDescription()包含(“MDCP”)?lcladdStatusMessages1:)
+立法会二题;
}否则{
if(response1.getItems()==null){
字符串lcladdstatemessages=CommonUtil.getLocalizeDMSG(“PRCE_LNE_ITM_OPTMS_ERR”,
新字符串[]{m.getSource(),m.getDescription()},m.getDescription());
list.get(0).addStatusMessages(“错误”,lcladdStatusMessages);
list.get(0.setOptimusError(true);
}否则{
if(!QuoteUtil.isECPQuote(list.get(0))){
字符串lcladdStatusMessages=CommonUtil.getLoclizedMsg(
“PRCE_LNE_ITM_MSG_FRM_WHN_RETRVNG_GUIDNCE_VAL”,
新字符串[]{m.getSource(),m.getDescription()},
来自“+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);
}
如果(m.getCode()!=null){
字符串pricingServiceMsgCode=m.getCode();
字符串pricingServiceSeverity=m.getSeverity();
地图分类图;
if(StringUtils.equals(“ERROR”,pricingServiceSeverity)){
categoryMap=getScenario(“严重性”,globalAccount1,null,true,null);
如果(categoryMap.size()!=0){
finalCategorylist.get(0.putAll)(categoryMap);
}
}
if(合作伙伴排他性自动升级1){
categoryMap=getScenario(pricingServiceMsgCode,globalAccount1,null,true,null);
如果(categoryMap!=null&&categoryMap.size()!=0){
finalCategorylist.get(0.putAll)(categoryMap);
}
}
}
返回null;
}
};
添加(tasksToExecute);
}

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

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

发生的情况是,您实际上是在循环外调用continue,因为call()函数本身没有for循环,所以您是否只从循环中调用call()。 要解决这个问题,您可以做的是使调用函数返回布尔值,并将continues替换为return true,如果没有返回true,则返回false。 然后更换:

 call()
在循环中为


请缩进您的代码,这样我们就可以在不进行水平滚动的情况下阅读它
continue
语句不在
for
循环的“内部”。它位于匿名内部类的方法体中。尽管内部类嵌套在
for
循环中,但它的
call()
方法被编译为一个单独的函数
 call()
if(call()) continue