簡體   English   中英

與Java中的方法的返回類型和輸入參數具有相同的對象

[英]having the same object as return type and input argument for a method in 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 o1 ,它由object o2組成。 Object o2object o3組成。 Object o3object o4組成。

在這里,我在參數中傳遞了相同的輸出對象,並將其作為返回類型。 可以更好地編碼嗎?

輸入inputObj使其成為類成員,因此您的方法僅將parOutput作為參數。

一種選擇是編寫一個實用程序/輔助函數,如下所示:

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

認為您真正要問的另一種選擇是實現方法鏈接 為此,您必須將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檢查。 您實際上並沒有把它放在一個合理的位置,因為如果parOutput實際上是null ,那么您當前的代碼將拋出NullPointerException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM