Оператор if и else одновременно, хотя это невозможно

У меня очень странная проблема с 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 также пропускается. (Надеюсь, это именно тот тест, который вы просили)

5
задан AndroidHustle 30 May 2012 в 16:30
поделиться