У меня очень странная проблема с 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 объект проверяется на тип экземпляра и соответствующим образом добавляется в макет.
Проблема, с которой я сталкиваюсь, заключается в том, что когда объект имеет тип Integer
, он входит в оператор if, выполняет две строки внутри оператора, а затем вместо выхода для нового цикла в цикле он переходит к оператору else, выполняя строку columnList.get(1).addComponent(hLayout)
(пропуская первую строку в операторе else).
Он также выполняет части оператора else, даже несмотря на то, что он уже ввел оператор if. Я знаю это, потому что вижу результат этого в приложении, которое разрабатываю, и я видел его программно, когда отлаживал. код.
Если я разобью задачу на мельчайшие компоненты:
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:По просьбе Джона я добавил ведение журнала к операторам.
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 также пропускается. (Надеюсь, это именно тот тест, который вы просили)