我故意针对Java OS 1.4.2
我正在尝试使用迭代器和apache的POI来读取excel电子表格。
代码在java 1.5中运行完美,但在1.4.2版本中我得到了问题主题中列出的错误。
代码是:
Iterator<HSSFRow> myIter = null;
*更新 - 删除了null声明,并立即将其设置为集合。仍然得到同样的错误! “迭代器无法解析为类型”(Iterator是一种抽象类型)。在我尝试从迭代器获取值之前发生此错误!
Iterator itRows = hsSheet.rowIterator();
它打破了那行代码,这显然是在应用程序的开头。我不明白需要做些什么来纠正这个问题。如果您有任何见解,请告诉我!
答案 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();
}