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

[Sugestão] Sugestão de solução.

Seguem classes Produto, ProdutoPerecivel e Main.
Na Classe Produto, getters e setters estão declarados em linha apenas por questão de espaço no post.
Na Classe ProdutoPerecivel, seguem observações:

  • Utilização de tipo LocalDate para dataValidade, pois tipos como Calendar e Date possuírem parte dos métodos como @Deprecated, enquanto uso de LocalDate ser mais recomendado na comunidade;
  • Realizado lançamento de exceções para o preenchimento das datas dos produtos perecíveis, considerando os casos de preenchimento como null, string vazía ("") ou em formato de data inválida (Ex.: 31/02/2025 - fevereiro não possuir 31 dias; 23/15/2025 - não possuir maior que 12)

Aceito sugestões para complementar código.
Em caso de dúvida sobre legibilidade ou trecho de código, peço que me questionem.

Classe Produto:

public class Produto {
    private String nome;
    private double preco;
    private int quantidade;
    
    public Produto() {}

    public Produto(String nome, double preco, int quantidade) {
        this.nome = nome;
        this.preco = preco;
        this.quantidade = quantidade;
    }

    public String getNome() { return this.nome; }
    public void setNome(String value) { this.nome = value; }

    public double getPreco() { return this.preco; }
    public void setPreco(double value) { this.preco = value; }

    public int getQuantidade() { return this.quantidade; }
    public void setQuantidade(int value) { this.quantidade = value; }

    @Override
    public String toString() {
        String item = (this.getQuantidade() >= 0 && this.getQuantidade() < 2) ? " item" : " itens";
        return "\nProduto " + this.getNome() + " custa R$ " + this.getPreco() + ". Tem " + this.getQuantidade() + item + " no estoque";
    }
}

Classe ProdutoPerecivel:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class ProdutoPerecivel extends Produto {

    private LocalDate dataValidade;
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("d/M/yyyy");

    public ProdutoPerecivel(String nome, double preco, int quantidade, String dataValidadeStr) {
        super(nome, preco, quantidade);
        setDataValidade(dataValidadeStr);
    }

    public void setDataValidade(String dataValidadeStr) {
        try {
            if (dataValidadeStr == null) { throw new NullPointerException(); }
            if (dataValidadeStr.trim().isEmpty()) { throw new IllegalStateException(); }

            this.dataValidade = LocalDate.parse(dataValidadeStr, FORMATTER);
        } catch (NullPointerException e) {
            throw new IllegalArgumentException("Data de validade não pode ser nula.");
        } catch (IllegalStateException e) {
            throw new IllegalArgumentException("Data de validade não pode ser vazia.");
        } catch (DateTimeParseException e) {
            throw new IllegalArgumentException("Data inválida.");
        }

    }

    public LocalDate getDataValidade() {
        return this.dataValidade;
    }

    @Override
    public String toString() {
        boolean vencido = dataValidade.isBefore(LocalDate.now());

        return super.toString() +
                    "\nValidade: " +
                    dataValidade.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) +
                    (vencido ? " (PRODUTO VENCIDO)" : "");
    }
}

Classe Main:

import java.util.ArrayList;

import com.exercicios.classes.Produto;
import com.exercicios.classes.ProdutoPerecivel;

public class Main {
    public static void main(String[] args) {
        ArrayList<Produto> listaDeProdutos = new ArrayList<>();
        
        Produto produtoUm = new Produto("Arroz", 3.10, 5);
        Produto produtoDois = new Produto("Feijão", 2.15, 1);
        Produto produtoTres = new Produto("Farofa", 2.10, 3);
        ProdutoPerecivel produtoPerecivelUm = new ProdutoPerecivel("Ovo", 10.99, 12, "02/02/2001");

        listaDeProdutos.add(produtoUm);
        listaDeProdutos.add(produtoDois);
        listaDeProdutos.add(produtoTres);

        System.out.println("Tamanho da lista de produtos: " + listaDeProdutos.size());
        System.out.println("Segundo item da lista de produtos: " + listaDeProdutos.get(1));
        System.out.println("Itens constantes na lista de produtos: " + listaDeProdutos.toString());

        System.out.println(produtoPerecivelUm);
    }
}
1 resposta
solução!

Oi, Leandro! Como vai?

Com o que você descreveu, a forma como tratou datas e exceções ficou bem organizada, e a separação das responsabilidades entre as classes deixou a lógica mais clara.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!