@Override 
public void setInput(Traffic traffic) { 
this.traffic = traffic; for (IAttribute attr : traffic.getAttrs()) { 
if (attr instanceof DpiAttr) {//获取DpiAttr 
dpiAttr = (DpiAttr) attr; 
floderAttr = dpiAttr.getFloderAttr(); 
                                 break;//////////////////////////注意此处 
} else if (attr instanceof FilesAttr) {//获取FilesAttr 
filesAttr = (FilesAttr) attr; 

} if (null == dpiAttr) { 
dpiAttr = DpiModelFactory.eINSTANCE.createDpiAttr(); 
traffic.getAttrs().add(dpiAttr); 
} if (null == floderAttr) { 
floderAttr = DpiModelFactory.eINSTANCE.createFloderAttr(); 
dpiAttr.setFloderAttr(floderAttr); 
} if (null == filesAttr) { 
filesAttr = ModelFactory.eINSTANCE.createFilesAttr(); 
traffic.getAttrs().add(filesAttr); 

initData(); 
} 我在if中加了break将有什么样的严重后果  请大家帮我分析下 

解决方案 »

  1.   

    跳出for循环,和在if外面加一样的
      

  2.   

    跳出for循环,继续执行for循环后面的代码
      

  3.   

    满足if条件,则退出循环
    一般if都是判断要查找的目标,如果找到了目标,后面就不需要再查找了,所以就break退出循环
      

  4.   

    对的   break 只是跳出循环,在if里面并不能影响break的结束循环操作。
      

  5.   


    for (IAttribute attr : traffic.getAttrs()) { 
    if (attr instanceof DpiAttr) {//获取DpiAttr 
    dpiAttr = (DpiAttr) attr; 
    floderAttr = dpiAttr.getFloderAttr(); 
      break;//////////////////////////注意此处 
    } else if (attr instanceof FilesAttr) {//获取FilesAttr 
    filesAttr = (FilesAttr) attr; 

    }  
    从目前代理看,它完成的是,当你找到 traffic.getAttrs()的一个属于DpiAttr类型的对象的时候,将它转型,记录它的dpiAttr.getFloderAttr()属性,然后就不再遍历traffic.getAttrs()了。
      

  6.   

    影响就是,如果你找到dpiAttr和floderAttr就break,那么就不会再查找filesAttr了,所以会导致后面的
    if (null == filesAttr)成立
      

  7.   

    大家请注意  我for循环后面还有三个if 是跟for循环中的 if相关的     请帮我分析这后面对这三个if的影响
      

  8.   

    break的作用就是跳出循环。在你这里,就是在第一次进入if后,执行完这一块就会跳出循环了,就不会执行else if的内容这一段,也不会再循环后面的内容。
      

  9.   


    //加不加break的区别就是,
    //加了break,找到第一个DpiAttr类型的attr,就赋值,跳出for循环,
    //这时如果之前遍历的值里没有FilesAttr类型的attr,那么第二个if就没有执行过,即使没有遍历的部分里面有值能满足条件也没用
    //不加break,就要全部遍历,第一个if里的最后的赋值是找到最后那个DpiAttr类型的attr时做的,
    //第二个if里的最后的赋值是找到最后那个FilesAttr类型的attr时做的
    for (IAttribute attr : traffic.getAttrs()) {  
    if (attr instanceof DpiAttr) {//获取DpiAttr  
    dpiAttr = (DpiAttr) attr;  
    floderAttr = dpiAttr.getFloderAttr();  
      break;//////////////////////////注意此处  
    } else if (attr instanceof FilesAttr) {//获取FilesAttr  
    filesAttr = (FilesAttr) attr;  
    }  
    }  
      

  10.   

    此break会跳出此for循环,但并不像9楼所说if (null == filesAttr)一定成立,因为可能在退出循环前的某次循环中filesAttr已经有值了
      

  11.   

    大家请注意 我for循环后面还有三个if 是跟for循环中的 if相关的 请帮我分析这后面对这三个if的影响
      

  12.   

    我没说一定成立啊,只是说会导致它成立,因为也有可能先进入else if
    如果不先进入else if,就会导致它成立
      

  13.   


    //最主要影响这块,用了break的话可能只遍历了前面一部分,抛弃了后面一部分,
    //前面没attr instanceof FilesAttr的话,就null == filesAttr,后面有也没用
    if (null == filesAttr) {  
    filesAttr = ModelFactory.eINSTANCE.createFilesAttr();  
    traffic.getAttrs().add(filesAttr);  
    }  
    //另外2个if就影响一下值而已