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 o1
由object o2
组成。
Object o2
由object o3
组成。
Object o3
由object o4
组成。
这里我在参数中传递相同的输出对象,并将其作为返回类型。可以更好地编码吗?
答案 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
。