@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将有什么样的严重后果 请大家帮我分析下
[code="java"]@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;/////!!直接break跳出去了
} else if (attr instanceof FilesAttr) {
filesAttr = (FilesAttr) attr; ////!!!!break了 这个就可能没机会执行了
}
}
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();
} [/code]
不会咋样。。break就是跳出上一层for循环嚒。。。。。for (IAttribute attr : traffic.getAttrs())
比如设置了dpiAttr 然后跳出for循环,如果filesAttr 还没设置就没机会赋值了,原来是null还是null。。。。
[code="java"]
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;
}
}
// 加上break;没有严重后果,看逻辑是不是需要这样。
// 加上break;得到第一个符合条件的,不加,得到最后一个符合条件的。
[/code]