.....
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
.....
Oi Daniel! Tudo bem?
O que dá pra fazer é deixar o método retornando uma classe abstrata com o método instantiateDTO, que será sobrescrito em cada classe que herdar dela:
public ClasseMaeDTO instantiateDTO(ProductAdmin product, ResourproductImage)Nessa classe, você coloca tudo que todas as classes fazem, trocando apenas a linha da instanciação:
public Page<ShowProductsAdminDTO> addingFirstImageShowProductsAdminDTO(Page<Product> allProductsPageable) {
List<ShowProductsAdminDTO> list = new ArrayList<>();
allProductsPageable.forEach(product -> {
try {
Resource productImage = fileService.loadProduct(product.getProductImages().get(0));
ShowProductsAdminDTO showProducts = instantiateDTO(product, productImage);
list.add(showProducts);
} catch (IOException e) {
e.printStackTrace();
}
});
return (Page<ShowProductsAdminDTO>) new PageImpl<>(list);
}Na classe que herdar da ClasseMaeDTO, o método sobrescrito fica mais ou menos assim:
@Override
public ClasseMaeDTO instantiateDTO(ProductAdmin product, ResourproductImage){
ClasseMaeDTO showProducts = new ShowProductsAdminDTO(product, productImage);
return showProducts;
}Utilizar esses recursos é um padrão de projeto chamado Template Method. Caso queira se aprofundar mais, recomendo o curso de Design Patterns I, que aborda o tema.
Espero ter ajudado! Abraços e bons estudos!