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一个值。

某些人认为,将值分配给方法体内的参数是一种不好的方法,因为它有时会令人困惑。一些开发人员更喜欢始终假设在方法运行期间从未为参数分配任何值。

为避免这种情况,您可以声明一个替代变量 type 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,它在 method 之外是不可见的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 回答