Estoy recibiendo PMD de color rojo violación

Evitar la reasignación de parámetros tales como ‘bankRequest’

Este es mi método

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

Podría alguien explicar qué mal con este código. Si lo ignoro cuál es el impacto.

InformationsquelleAutor Suranga | 2012-11-22

5 Comentarios

  1. 2

    Debe evitar la re asignación de variables por las razones ya dadas. De todos modos,en lugar de asignar una nueva variable a considerar acaba de regresar de el bucle a la hora de encontrar el valor correcto. Thiswould también hacer «break» redundante.

  2. 4

    En su caso, existe un parámetro denominado bankRequest. Dentro del método, se están asignando bankRequest un valor.

    Por algunos es considerado un mal criterio para asignar valores a los parámetros dentro de un método del cuerpo, tal como es, a veces, confuso. Algunos desarrolladores prefieren siempre suponiendo que un parámetro es nunca asignado ningún valor durante un método de ejecución.

    Para evitar esto, usted puede declarar una variable alternativa de tipo BankDTO:

    BankDTO updatedRequest = bankRequest;
    ...
    ...
    updatedRequest = reloadBankRequest(bankRequest, fee);
    ...
    ...
    return updatedRequest;
  3. 1

    En java parámetros de llamada por referencia. En el caso de que esto significa, si se cambia el objeto bankRequest no es visible fuera de el método loadTariff.

    Después de la línea bankRequest = reloadBankRequest(bankRequest, fee); la variable bankRequest referencia a un objeto distinto de BankDTO.

    Si desea cambiar los valores internos de bankRequest y utilizarlo después de llamar a loadTariff usted debe hacer algo como bankRequest.loadRokaAndBankFee(fee).

    • En realidad, los parámetros se pasan por valor en Java. No hay que confundir la noción de referencia, con la noción de tipo de referencia.
  4. 0

    Reasignar valores a los entrantes de los parámetros no es recomendable. Uso temporal de la variable local.

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

Dejar respuesta

Please enter your comment!
Please enter your name here