4

PMDの赤い色の違反が発生しています

'bankRequest'などのパラメーターの再割り当ては避けてください

これが私の方法です

   @Override
public BankDTO loadTariff(BankDTO bankRequest, int[] executionLevels) {
    double[] fee = null;
    for (int level : executionLevels) {

        // Check the tariff availability from execution level one to .....
        fee = loadCokaAndBankFee(bankRequest,level);

        if (fee != null) { // if fee found reload the bank request with new
                            // amount
            bankRequest = reloadBankRequest(bankRequest, fee);
            break; // no need to go for any other level deep level cover //
                    // here.
        } // if tariff not found use the esb provided amounts
    }

    return bankRequest;
}

誰かがこのコードの何が悪いのか説明できますか?それを無視すると、どのような影響がありますか。

4

5 に答える 5

5

あなたの場合、という名前のパラメータがありますbankRequest。メソッド内でbankRequest、値を割り当てています。

一部の人は、メソッドの本体内のパラメーターに値を割り当てることは、時には混乱を招くため、不適切なアプローチと見なされます。一部の開発者は、メソッドの実行中にパラメーターに値が割り当てられないことを常に想定することを好みます。

これを回避するには、次のタイプの代替変数を宣言できますBankDTO

BankDTO updatedRequest = bankRequest;
...
...
updatedRequest = reloadBankRequest(bankRequest, fee);
...
...
return updatedRequest;
于 2012-11-22T06:36:30.673 に答える
2

すでに述べた理由により、変数の再割り当ては避けてください。とにかく、新しい変数を割り当てる代わりに、正しい値を見つけるときにループから戻ることを検討してください。これにより、「ブレーク」も冗長になります。

于 2012-11-22T07:36:21.837 に答える
1

Javaでは、パラメータは参照によって呼び出されます。あなたの場合、これは、オブジェクトを変更した場合bankRequest、メソッドの外部に表示されないことを意味しますloadTariff

行の後bankRequest = reloadBankRequest(bankRequest, fee);、変数bankRequestはBankDTOの別のオブジェクトを指しています。

bankRequestの内部値を変更し、呼び出し後に使用するloadTariff場合は、のような操作を行う必要がありますbankRequest.loadRokaAndBankFee(fee)

于 2012-11-22T06:37:56.180 に答える
1

着信パラメータに値を再割り当てすることはお勧めしません。代わりに一時ローカル変数を使用してください。

Example(s): 

public class Foo {
  private void foo(String bar) {
    bar = "something else";
  }
}

参照: http: //pmd.sourceforge.net/pmd-5.0.1/rules/java/design.html

于 2013-01-02T13:09:24.993 に答える
0

着信パラメータに値を再割り当てすることはお勧めしません。一時ローカル変数を使用します。

public BankDTO loadTariff(BankDTO bankRequest, int[] executionLevels) {
    double[] fee = null;

BankDTO updatedBankRequest = bankRequest;

    for (int level : executionLevels) {

        fee = loadCokaAndBankFee(bankRequest,level);

        if (fee != null) { 
            updatedBankRequest = reloadBankRequest(bankRequest, fee);
            break; 
        }        }

    return updatedBankRequest;
}
于 2017-09-20T11:59:59.240 に答える