And*_*tle 5 java eclipse if-statement
我在日食中遇到了一个非常奇怪的问题.看下面的代码:
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++;
}
Run Code Online (Sandbox Code Playgroud)
在for循环中,检查对象的实例类型并相应地添加到布局中.
我遇到的问题是,当对象是类型时,Integer它进入if语句,执行语句中的两行,然后不是在循环中留下新的循环,而是跳转到else语句,执行行columnList.get(1).addComponent(hLayout)(跳过else语句中的第一行).
它正在执行else语句的一部分,即使它已经进入了if语句.我知道这是因为我在我正在开发的应用程序中看到它的产品,并且我在调试代码时以编程方式看到它.
如果我要将问题分解为最小的组件:
i = 0;
if(true) {
i++;
} else {
i++;
}
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)
我的问题是打印输出: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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑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);
}
}
Run Code Online (Sandbox Code Playgroud)
当它从if语句跳转到else语句时,也会跳过else语句中的日志.(我希望这是你要求的测试)
如果您的代码如下所示:
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);
Run Code Online (Sandbox Code Playgroud)
(请注意 上缺少大括号else if)那么只有第一行将被视为受条件约束,而第二行将始终被评估。
这是我能想到的唯一会导致你所解释的情况的事情。您确定您在 IDE 中查看的代码正是正在执行的代码吗?例如,如果您在多个 JAR 中有一个具有相同包和名称的类,那么它可能正在使用该类的过时版本。
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |