我在eclipse中遇到了一个非常奇怪的问题。看下面的代码:
public void addItem(ArrayList<Object> objectLists) {
SHorizontalLayout hLayout = Cf.hLayout();
hLayout.setSizeFull();
hLayout.setHeight(rowHeight, UNITS_PIXELS);
if(rowCount % 2 != 0 && rowCount != 0) {
hLayout.addStyleName("row-even");
} else {
hLayout.addStyleName("row-odd");
}
for(Object object : objectLists) {
if(object instanceof String || object instanceof Integer) {
hLayout.addComponent(Cf.h1(object.toString()), Alignment.MIDDLE_CENTER);
columnList.get(0).addComponent(hLayout);
} else if(object instanceof ChipSlotGrid) {
hLayout.addComponent((ChipSlotGrid)object, Alignment.MIDDLE_CENTER);
columnList.get(1).addComponent(hLayout);
}
}
rowCount++;
}
在 for 循环中,检查对象的实例类型并相应地添加到布局中。
我遇到的问题是,当对象是 type 时,Integer
它进入if 语句,执行语句内的两行,然后不是在循环中离开一个新的循环,而是跳转到 else 语句,执行 row columnList.get(1).addComponent(hLayout)
(跳过 else 语句中的第一行)。
即使它已经进入了 if 语句,它也在执行 else 语句的一部分。我知道这一点是因为我在我正在开发的应用程序中看到了它的产品,并且在我调试代码时我已经以编程方式看到了它。
如果我要将问题分解为最小的组件:
i = 0;
if(true) {
i++;
} else {
i++;
}
System.out.println(i);
对于我的问题,打印输出将是:2
我在这里不知所措。我的 IDE 有问题吗?有没有人遇到过这种情况并且知道可能出了什么问题?
编辑: 我尝试过切换语句并且可以得出结论该模式重复自身。
for(Object object : objectLists) {
if(object instanceof ChipSlotGrid) {
hLayout.addComponent((ChipSlotGrid)object, Alignment.MIDDLE_CENTER);
columnList.get(1).addComponent(hLayout);
} else if(object instanceof String || object instanceof Integer) {
hLayout.addComponent(Cf.h1(object.toString()), Alignment.MIDDLE_CENTER);
columnList.get(0).addComponent(hLayout);
}
}
编辑 2:根据 Jon 的请求,我在语句中添加了日志记录。
for(Object object : objectLists) {
if(object instanceof ChipSlotGrid) {
log.info("Inside if");
hLayout.addComponent((ChipSlotGrid)object, Alignment.MIDDLE_CENTER);
columnList.get(1).addComponent(hLayout);
} else if(object instanceof String || object instanceof Integer) {
log.info("Inside else");
hLayout.addComponent(Cf.h1(object.toString()), Alignment.MIDDLE_CENTER);
columnList.get(0).addComponent(hLayout);
}
}
当它从 if 语句跳转到 else 语句时,else 语句中的日志也会被跳过。(我希望这是你要求的测试)