Java - итератор: «Синтаксическая ошибка, параметризованные типы доступны только при уровне источника 5.0» - PullRequest
1 голос
/ 06 июня 2010

Я специально нацеливаюсь на Java OS 1.4.2

Я пытаюсь использовать итератор в сочетании с POI apache для чтения таблицы Excel.

Код отлично работает в Java 1.5, но в версии 1.4.2 я получаю сообщение об ошибке, указанное в теме вопроса.

код:

Iterator<HSSFRow> myIter = null;

* Обновлено - удалено пустое объявление и сразу установлено значение для коллекции. Все еще получаю ту же ошибку! «Итератор не может быть преобразован в тип» (итератор является абстрактным типом). Эта ошибка возникает, прежде чем я пытаюсь получить значения от итератора!

Iterator itRows = hsSheet.rowIterator();

    • Я также импортировал переменную HSSFRow

он разбивается на ту строку кода, которая явно находится в начале приложения. Я не понимаю, что нужно сделать, чтобы исправить эту проблему. Пожалуйста, дайте мне знать, если у вас есть понимание!

Ответы [ 4 ]

4 голосов
/ 06 июня 2010

Java с версией ниже 1.5 не обрабатывает универсальные типы (или типы, параметризованные другими типами: список).

Для запуска вашего кода в Java 1.4 вам нужно потерять параметр универсального типа и выполнить приведение самостоятельно.

Iterator myIterator = // initialize it
HSSFROW row = (HSSFROW)myIterator.next();

Более полный пример:

List collection = new ArrayList();

collection.add("a");
collection.add("b");
collection.add("c");

Iterator myIterator = collection.iterator();

while ( myIterator.hasNext() ) {
    String value = (String) myIterator.next();
    System.out.println("value: " + value);
}

и вывод для этого:

value: a
value: b
value: c
1 голос
/ 06 июня 2010

Нельзя использовать обобщенные значения (т. Е. параметризованные типы ) в версиях Java до 1.5. Обобщения, представленные в версии 1.5, и даже синтаксис SomeClass<T> не поддерживаются в 1.4.2. Вот почему вы получаете ошибку.

0 голосов
/ 20 мая 2015

Попробуйте это:

Итератор rows = sheet.rowIterator ();

    while (rows.hasNext())
    {
        row=(HSSFRow) rows.next();
        Iterator cells = row.cellIterator();

        while (cells.hasNext())
        {
            cell=(HSSFCell) cells.next();

            if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING)
            {
                System.out.print(cell.getStringCellValue()+" ");
            }
            else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
            {
                System.out.print(cell.getNumericCellValue()+" ");
            }
            else
            {
                //U Can Handel Boolean, Formula, Errors
            }
        }
        System.out.println();
    }
0 голосов
/ 06 июня 2010

Вы уверены, что это не Iterator<Something> myIter = null;, потому что, похоже, именно это и говорит ошибка; вы используете дженерики и пытаетесь скомпилировать для 1.4, но дженерики были добавлены только в 1.5.

edit: Вы можете использовать клавишу `(слева от клавиши 1) для разделения блоков кода; Вам нужно удалить дженерики и просто использовать Iterator myIter = null;

...