在 Java 中使用变量的引用数组

reference array using variable in Java

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

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

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

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

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";

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

这个

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

尝试选取数组的第一个和第二个元素newrow。很遗憾,您将 newrow 声明为

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

这不是 array,而是 Stringif 中的语法不适用于 String。我不确定您要做什么,但是 if 检查将不起作用。

编辑: 如果您尝试从字符串中获取 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 变量中的任何值。

如果您能向我们展示您期望的外观,那将会有所帮助。

我对 talend 不是很熟悉(理解:一点也不)。但听起来您拥有生成的 class(比如 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++;
    }
}

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