Olá

Nunca altere o estado dos objetos passados por parâmetro de um método, utilize uma variável temporária quando alterar o valor de algum atributo do objeto.

Essa prática é para evitar erros diante de uma confusão causada pelo tipo de passagem de valores que o Java adota. Java sempre faz a passagem por valor.

Abaixo um exemplo de erro que levamos a cometer quando alteremos o estado de um objeto.

Nós temos um objeto do tipo ItemPedido que possui os atributos quantidade e preço. Passamos esse objeto para o método totalizarPedido(), que para seu calculo interno subtrai um caso o parâmetro promoLeveUmGratis for true.

if(promoLeveUmGratis){
item.setQuantidade(item.getQuantidade().subtract(BigDecimal.ONE));
}

Observe que estamos atribuindo o resultado da subtração no mesmo objeto que recebemos por parâmetro para o cálculo na linha abaixo.

return item.getQuantidade().multiply(item.getPreco());

Em seguida os métodos calcularFrete() e darBaixaNoEstoque() são invocados.

ex.totalizarPedido(ip, true);
ex.calcularFrete(ip);
ex.darBaixaNoEstoque(ip);

Coloquei alguns sysout´s para ilustrar o problema.

Quantidade de itens no pedido:   10

Quantidade de itens no frete:    9

Quantidade de itens a dar baixa: 9

Note que para os dois métodos seguintes a quantidade que chegou foi alterada, não era essa a intenção. Isso traria sérios problemas para nós.

Downloads: [download id=”30″] [download id=”31″]

Até mais,

Share


Deixe um comentário