Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Processo de exclusão do item de um mapa

Em certo momento da aula é necessário executar a exclusão de um item do carrinho do compras e o professor codifica o processo da seguinte maneira:

public void remover(Integer produtoId, TipoPreco tipoPreco) {
    Produto produto = new Produto();
    produto.setId(produtoId);
    itens.remove(new CarrinhoItem(produto, tipoPreco));
}

O processo funciona corretamente e o mapa itens remove a chave, limpando o item do carrinho. Entretanto, isso me acendeu a seguinte dúvida: como pode o mapa reconhecer uma nova instância de CarrinhoItem como uma instância que ele já continha?

Eu fiz o debug do processo e constatei que o item adicionado no mapa, no momento de colocar no carrinho, é realmente diferente (endereço de memória) do item instanciado no processo de exclusão. Isso significa que o Spring utiliza o id (anotado com @Id) do produto no processo de hashing a fim de encontrar o mesmo objeto no mapa?

Obrigado

1 resposta
solução!

Oi Felipe

Nesse caso, como itens é um tipo HashMap o que ocorre por baixo dos panos é que o método remove vai invocar o método hash do CarrinhoItem sendo passado. Esse método vai gerar um hash que corresponde ao id do elemento armazenado no seu map, se for idêntico a um hash de algum valor previamente armazenado, o Java vai entender que é o mesmo elemento e por isso vai remove-lo. Na prática, se for instâncias diferentes mas que o método hash devolva o mesmo valor, será considerado o mesmo elemento.