Java - Iterator:“语法错误,参数化类型仅在源级别为5.0时可用”

时间:2010-06-06 19:10:11

标签: java iterator

我故意针对Java OS 1.4.2

我正在尝试使用迭代器和apache的POI来读取excel电子表格。

代码在java 1.5中运行完美,但在1.4.2版本中我得到了问题主题中列出的错误。

代码是:

Iterator<HSSFRow> myIter = null;

*更新 - 删除了null声明,并立即将其设置为集合。仍然得到同样的错误! “迭代器无法解析为类型”(Iterator是一种抽象类型)。在我尝试从迭代器获取值之前发生此错误!

Iterator itRows = hsSheet.rowIterator();

    • 我也导入了HSSFRow变量

它打破了那行代码,这显然是在应用程序的开头。我不明白需要做些什么来纠正这个问题。如果您有任何见解,请告诉我!

4 个答案:

答案 0 :(得分:4)

版本低于1.5的Java不处理泛型类型(也称为其他类型参数化的类型:List)。

要在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 :(得分:1)

您不能在1.5之前的Java版本中使用泛型(即参数化类型)。 1.5.2中引入的泛型甚至语法SomeClass<T>在1.4.2中都不受支持。这就是你得到错误的原因。

答案 2 :(得分:0)

你确定它不是Iterator<Something> myIter = null;,因为这似乎是错误所说的;你正在使用泛型并尝试编译为1.4,但泛型只是在1.5中添加。

编辑:您可以使用键(左键1)来分隔代码块;您需要删除泛型,然后使用Iterator myIter = null;

答案 3 :(得分:-1)

试试这个:

Iterator 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();
    }