@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将有什么样的严重后果 请大家帮我分析下
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将有什么样的严重后果 请大家帮我分析下
解决方案 »
- 怎么实现servlet接收客户端发来的http请求并返回啊
- 急~~~~~ document 重复加载问题
- ibatis 调用存储过程返回游标
- 非常紧急的问。。。。SPRING加载的类引用时却为NULL。。。。
- 调查从事java(非嵌入式设备)开发的人员薪水
- 几种开发web service方式(axis,axis2,wsif,xfire)的差别有哪些?
- 一个tomcat奇怪的问题
- javascript取不到文本框的值?
- 关于struts中logic:iterate的问题,急。
- 哪位老师能帮我推荐几个好用的开源DB组件?
- 项目文件统计
- spring里applicationContext.xml里的一堆http://...怎么记亿?
一般if都是判断要查找的目标,如果找到了目标,后面就不需要再查找了,所以就break退出循环
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()了。
if (null == filesAttr)成立
//加不加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;
}
}
如果不先进入else if,就会导致它成立
//最主要影响这块,用了break的话可能只遍历了前面一部分,抛弃了后面一部分,
//前面没attr instanceof FilesAttr的话,就null == filesAttr,后面有也没用
if (null == filesAttr) {
filesAttr = ModelFactory.eINSTANCE.createFilesAttr();
traffic.getAttrs().add(filesAttr);
}
//另外2个if就影响一下值而已