Java中使用变量的引用数组

时间:2015-04-16 13:33:55

标签: java talend

我请耐心等待,我已经使用Java 2天了,我遇到了一些障碍。

我正在使用Talend使用tMemorize和tJava组件执行计数,但这可能是Java开发人员的问题。我以前发过一个问题,在我的新问题中使用此方法在joblet中更多Java相关,可以在这里查看: using Joblets in talend with tMemorize and tJavaFlex

我需要引用java代码talend生成的数组。由于在多个joblet中使用tJavaFlex的问题,我无法直接引用此元素:Java每次使用时都会重命名joblets。

理解我的代码在正常情况下的工作方式(不包括使用joblets)可能很有用。

int counter = 1;

if (EnquiryID_mem_1_tMemorizeRows_1[0].equals(EnquiryID_mem_1_tMemorizeRows_1[1]))
{
counter++;
}
row3.counter = counter;

EnquiryID_mem_1_tMemorizeRows_1[0]EnquiryID_mem_1_tMemorizeRows_1[1]是我需要参考的内容。

为了解决这个问题,我编写了以下代码。

String string = currentComponent;
String[] parts = string.split("_");
String part1 = parts[0];
String part2 = parts[1];
String joblet = part1+'_'+part2;
String newrow = "EnquiryID_"+joblet+"_tMemorizeRows_1"

if (newrow[0].equals(newrow[1]))
{
counter++;
}
row3.counter = counter;

但是我收到以下错误:

The type of the expression must be an array type but it resolved to String

我知道newrow变量是一个字符串,我用它来引用一个数组。我已经在网上搜索了很多决心,但我不能很好。有人能帮帮我吗?

谢谢

以下是我的代码应该引用的talend代码。我把它从我正在使用的currentComponent中取出来,当它变成一个没有直接使用的那个。

                        currentComponent = "mem_1_tMemorizeRows_1";

                    // row1
                    // row1

                    if (execStat) {
                        runStat.updateStatOnConnection("row1" + iterateId,
                                1, 1);
                    }

                    for (int i_mem_1_tMemorizeRows_1 = iRows_mem_1_tMemorizeRows_1 - 1; i_mem_1_tMemorizeRows_1 > 0; i_mem_1_tMemorizeRows_1--) {
                        EnquiryID_mem_1_tMemorizeRows_1[i_mem_1_tMemorizeRows_1] = EnquiryID_mem_1_tMemorizeRows_1[i_mem_1_tMemorizeRows_1 - 1];
                    }
                    EnquiryID_mem_1_tMemorizeRows_1[0] = row1.EnquiryID;

                    mem_1_row2 = row1;

                    tos_count_mem_1_tMemorizeRows_1++;

                    /**
                     * [mem_1_tMemorizeRows_1 main ] stop
                     */

                    /**
                     * [mem_1_tJavaFlex_1 main ] start
                     */

                    currentComponent = "mem_1_tJavaFlex_1";

                    // mem_1_row2
                    // mem_1_row2

                    if (execStat) {
                        runStat.updateStatOnConnection("mem_1_row2"
                                + iterateId, 1, 1);
                    }

                    mem_1_row3.QuoteID = mem_1_row2.QuoteID;
                    mem_1_row3.EnquiryID = mem_1_row2.EnquiryID;

                    if (EnquiryID_mem_1_tMemorizeRows_1[0]
                            .equals(EnquiryID_mem_1_tMemorizeRows_1[1])) {
                        rower++;
                    }
                    mem_1_row3.rower = rower;

                    tos_count_mem_1_tJavaFlex_1++;

                    /**
                     * [mem_1_tJavaFlex_1 main ] stop
                     */

                    /**
                     * [mem_1_tMap_1 main ] start
                     */

                    currentComponent = "mem_1_tMap_1";

感谢所有迄今为止帮助过的人。

2 个答案:

答案 0 :(得分:2)

if (newrow[0].equals(newrow[1]))

尝试选择数组newrow的第一个和第二个元素。不幸的是,您将newrow声明为

String newrow = "EnquiryID_"+joblet+"_tMemorizeRows_1"

不是array而是Stringif中的语法不适用于String。我不确定你要做什么,但如果检查不起作用。

编辑: 如果您尝试从字符串中选择char,则需要使用charAt(index)

如果您想将newrow视为数组,则必须将其声明为此类并将适当的元素传递给它。

编辑2:我认为您正试图将joblet中的实际数据传递给newrow

String newrow = "EnquiryID_"+joblet+"_tMemorizeRows_1"

但这里发生的事情是,所有内容都在一个String中连接在一起,因此您需要找出您要查找的数据(我假设为part[0]part[1])在哪里那个String所以你可以把它们拉出来(基本上哪些索引包含你要找的值)。

newrow将如何看待该作业的示例:

"EnquiryID_part1_part2_tMemorizeRows_1"

所以"part1"将从索引10开始,并将在索引14结束。我在这里只使用"part1",但它会在part1变量中存储任何值。

如果您能告诉我们您的期望,那将会有所帮助。

答案 1 :(得分:0)

我对talend并不是很熟悉(理解:根本不是)。但听起来你有一个生成类的某种属性(比如myGeneratedObject),你想要按名称访问它。

在这种情况下,您可以执行以下操作:

String newrow = "EnquiryID_"+joblet+"_tMemorizeRows_1"
Field field = myGeneratedObject.getClass().getField(newrow);
if (field.getClass().isArray()) {
    if(Array.get(field, 0).equals(Array.get(field, 1)) {
        counter++;
    }
}

这完全取决于您如何真正地访问该字段以及声明它的位置。但如果它是一个对象的属性,那么由于我对确切问题缺乏了解,上面的代码应该起作用,+ / - 上下文调整。