Deixando replace genérico
Atualizado
Atualizado
Criar interface IdProjection
Tipos Product e ProductProjection devem implementar IdProjection
Refatorar o método auxiliar para que fique genérico
Bom, os dois parâmetros precisam ter ID, tanto a Projection quanto a Entidade:
Para deixar isso genérico, criaremos uma interface que tenha o método getId.
No pacote interface criar: IdProjection
Agora, o nosso ProductProjection não terá mais um getId(). Ele irá herdar a interface acima.
O Product é a mesma coisa, também irá herdar a interface (colocar @Override no getId para o compilador).
Voltando ao método replace, deixando ele genérico (usando tipo curinga).
Na nomeação do método, passaremos o tipo genérico . E não será mais uma lista de Product, e sim uma lista de IdProjection. < Só isso, não iria funcionar, para que essa lista aceite como subtipo, uma lista de Produto, iremos utilizar o tipo curinga (? extends).
O tipo curinga em suma diz: será uma lista de qualquer tipo (ou subtipo) de IdProjection. Como o Product implementa esse IdProjection, ele é um subtipo de IdProjection (Long).
Ou seja, uma lista de Product, casa com uma Lista de IdProjection.
Copiaremos a mesma nomenclatura para os parâmetros:
Método alterado:
Service alterado (um simples casting):