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

时间:2015-04-15 05:09:51

标签: java

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);
}

我的主要输入object o1object o2组成。 Object o2object o3组成。 Object o3object o4组成。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

一种选择是编写实用程序/辅助函数,如下所示:

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

...然后在调用代码中实现你的循环体,如:

if(parOutput != null && parOutput[i].getSubscriptionsX7() != null) {
    output[i] = configuredOutput(parOutput[i],inputObj);
}   

另一个选项,以及我实际想要的想法,就是实施method-chaining。要做到这一点,您必须将setLevelXOutputObj函数重构为Output类的实例方法。

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

Output source = parOutput[i];
output[i] = new Output().setLevel1OutputObj(source, inputObj)
                        .setLevel2OutputObj(source, inputObj)
                        .setLevel3OutputObj(source, inputObj)
                        .setLevel4OutputObj(source, inputObj);

事实上,你总是将你正在使用的Object作为静态函数的最后一个参数传递,这是一个很好的指示,你的静态函数将更适合作为实例方法实现。

请注意,正如pbabcdefp所述,您可能还想查看parOutput != null支票。你并没有把它放在合理的地方,因为如果NullPointerException实际上是parOutput,你当前的代码会抛出null