1
resposta

.....

.....

1 resposta

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!