.....
.....
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!