【问题标题】:How to create an ArrayList object in an User Defined Java Class in Kettle?如何在 Kettle 的用户定义的 Java 类中创建 ArrayList 对象?
【发布时间】:2016-06-29 05:46:58
【问题描述】:

我正在尝试在 pentaho 水壶的用户定义 Java 类对象中声明 ArrayList 对象。我正在User Defined Java Class:

中尝试一个简单的代码
import java.util.List;
import java.util.ArrayList;

List<String> where = new ArrayList<String>();

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{    

    return true;

}

但是当我测试这个类时,我得到一个错误:

Line 4, Column 6: Identifier expected

可能是什么问题?如果我注释掉 List&lt;String&gt; where = new ArrayList&lt;String&gt;(); 行,代码运行良好。

【问题讨论】:

  • 我没有看到你的班级声明在哪里?
  • Kettle 的User Defined Java Class 步骤中不需要定义类。在运行转换时,Kettle 已经在其环境中做到了这一点。如果我写private String where 而不是List&lt;String&gt; where = new ArrayList&lt;String&gt;(); ,代码运行良好。

标签: java pentaho kettle pentaho-spoon


【解决方案1】:

Pentaho wiki 中所述,Janino 不支持泛型。

另外需要注意的是 Janino,本质上是一个 Java 字节码生成器,只支持 Java 1.5 规范的一个子集。要查看功能和限制的完整列表,请访问 Janino 主页。在撰写本文时,最明显的限制是缺少泛型。

所以,你应该像这样使用一个简单的列表:

List where;

而不是使用泛型。

【讨论】:

    【解决方案2】:

    这是 forums.pentaho.com 上的 known issue。内置编译器不使用泛型。只需制作一个列表对象,例如:

    import java.util.List;
    
    List where;
    
    public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
    {    
    
        return true;
    
    }
    

    不会引发任何错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 2017-04-08
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2013-12-01
      相关资源
      最近更新 更多