Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有与Java中方法的返回类型和输入参数相同的对象_Java - Fatal编程技术网

具有与Java中方法的返回类型和输入参数相同的对象

具有与Java中方法的返回类型和输入参数相同的对象,java,Java,我有一个主要的输入对象o1,它由对象o2组成。 对象o2由对象o3组成。 对象o3由对象o4组成 这里我在参数中传递相同的输出对象,并将其作为返回类型。它能被更好地编码吗 输入inputObj使其成为类成员,因此您的方法只有parOutput作为参数。一个选项是编写实用程序/帮助程序函数,如下所示: public static void prepareOutput (Output[] parOutput, Input inputObj) { int arraySize = parO

我有一个主要的输入对象o1,它由对象o2组成。 对象o2由对象o3组成。 对象o3由对象o4组成


这里我在参数中传递相同的输出对象,并将其作为返回类型。它能被更好地编码吗

输入inputObj使其成为类成员,因此您的方法只有parOutput作为参数。

一个选项是编写实用程序/帮助程序函数,如下所示:

public static void prepareOutput (Output[]  parOutput, Input inputObj) 
{
    int arraySize  = parOutput.length;
    Output[] output = new Output[arraySize];
    for(int i=0; i<arraySize; i++)
    {           
        if(parOutput != null && parOutput[i].getSubscriptionsX7() != null)
        {
            output[i] = new Output();
            output[i] = setLevel1OutputObj(parOutput[i],inputObj, output[i]);
            output[i] = setLevel2OutputObj(parOutput[i],inputObj, output[i]);
            output[i] = setLevel3OutputObj(parOutput[i],inputObj, output[i]);
            output[i] = setLevel4OutputObj(parOutput[i],inputObj, output[i]);
        }   
    }
    inputObj.setSubscriberInfoOutput(output);
}
…然后在调用代码中实现循环体,如:

public static Output configuredOutput(Output source, Input input) {
    if (source.getSubscriptionsX7() == null) {
        return null;
    }

    Output result = new Output();
    result = setLevel1OutputObj(source, input, result);
    result = setLevel2OutputObj(source, input, result);
    result = setLevel3OutputObj(source, input, result);
    result = setLevel4OutputObj(source, input, result);

    return result;
}
另一个选择,我想你实际上是在问,是实施。为此,您必须将setLevelXOutputObj函数重构为输出类上的实例方法

如果您这样做了,那么您就可以用如下内容重写您的循环体:

if(parOutput != null && parOutput[i].getSubscriptionsX7() != null) {
    output[i] = configuredOutput(parOutput[i],inputObj);
}   
您总是将正在使用的对象作为最终参数传递给静态函数,这一事实很好地表明静态函数更适合作为实例方法实现


请注意,正如pbabcdefp所述,您可能还希望查看您的parOutput!=空检查。您没有将它放在合理的位置,因为如果parOutput实际为null,您当前的代码将抛出NullPointerException。

描述您试图解决的问题。我不理解这个问题,但我可以看到parOutput是否为空!=null在错误的位置。这里也是。你问问题的方式对我来说毫无意义。在o1对象由o2对象组成的情况下,您试图说明什么?并且您的方法没有返回类型。其返回类型为void。你能试着问清楚一点吗?setLevelXOutputObj对我来说也没有意义。我不会叫它global@AdrianShum在方法的上下文中是全局的,在方法的外部,我也说过类成员,我认为它也容易被理解。我同意@AdrianShum。全局和类成员不是一回事。Java甚至没有真正的全局变量,最接近的是publicstatic,希望是final,它仍然不同于类成员变量。
Output source = parOutput[i];
output[i] = new Output().setLevel1OutputObj(source, inputObj)
                        .setLevel2OutputObj(source, inputObj)
                        .setLevel3OutputObj(source, inputObj)
                        .setLevel4OutputObj(source, inputObj);