【问题标题】:Java - Iterator: "Syntax error, parameterized types are only available if source level is 5.0"Java - 迭代器:“语法错误,参数化类型仅在源级别为 5.0 时可用”
【发布时间】:2011-02-28 10:56:51
【问题描述】:

我故意针对 Java OS 1.4.2

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

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

代码是:

Iterator<HSSFRow> myIter = null;

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

Iterator itRows = hsSheet.rowIterator();

    • 我还导入了 HSSFRow 变量

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

【问题讨论】:

  • 我用 [括号] 代替了箭头,因为它们已从文本中删除
  • 对代码使用代码标签,通过替换你已经完全改变了代码。

标签: java iterator


【解决方案1】:

版本低于 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

【讨论】:

  • 啊,我试过了。当我初始化它(为null)然后设置它,我仍然得到同样的错误
  • 我在答案中发布了一个更完整的示例。它不使用 HSSFROW,但它适用于字符串集合。
  • 该代码有效 :) 输出取自代码的实际运行。你一定是在做一些不同的事情。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你确定不是Iterator&lt;Something&gt; myIter = null;,因为这似乎是错误的意思;您正在使用泛型并尝试为 1.4 编译,但泛型仅在 1.5 中添加。

    edit:您可以使用键 `(1 个键的左侧)来分隔代码块;您需要删除泛型并使用Iterator myIter = null;

    【讨论】:

      【解决方案4】:

      试试这个:

      迭代器行 = 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();
          }
      

      【讨论】:

      • 请不要发布可能有帮助的推测性答案,只有在您了解问题并有解决方案时才能回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2022-11-29
      相关资源
      最近更新 更多