1
resposta

10 Desafio: hora da prática - Resolvido e comentado

Fiquem a vontade para sugerirem correções e melhorias.
Classe Main:

package br.com.trtron.listadesafio;

import java.util.ArrayList;

import br.com.trtron.listadesafio.model.Pessoa;

public class Main {
    public static void main(String[] args) {
        //Nas linhas abaixo, criamos variáveis do tipo Pessoa que receberão as instâncias de objetos.
        //Os objetos são criados com new e usamos o construtor cheio para preencher seus atributos, sem a necessidade de
        //setter agora.
        Pessoa pessoa1 = new Pessoa(23, "Thiago");
        Pessoa pessoa2 = new Pessoa(18, "Lucas");
        Pessoa pessoa3 = new Pessoa(56, "João");

        //Criamos uma variável "pessoas" do tipo ArrayList que gerará uma lista de um tipo de elemento, nesse caso Pessoa.
        //new ArrayList<>() cria uma nova lista atribuida a pessoas
        ArrayList<Pessoa> pessoas = new ArrayList<>();
        pessoas.add(pessoa1);
        pessoas.add(pessoa2);
        pessoas.add(pessoa3);

        //Nos prints, não precisamos chamar o toString, ele é chamado automaticamente. E como sobreescrevemos o método
        //na classe Pessoa, o print será feito conforme a nova função.
        System.out.println("Tamanho da lista: " + pessoas.size());
        System.out.println("Primeira pessoa da lista: " + pessoas.get(0));
        System.out.println(pessoas);
        
    }
}

Classe Pessoa:

package br.com.trtron.listadesafio.model;

public class Pessoa {
    private String nome;
    private int idade;

    //Aqui um "construtor cheio", ou construtor com parâmetros foi criado. Desta forma, é possível criar um objeto com seus
    //atributos, no momento em que é instanciado.
    public Pessoa(int idade, String nome) {
        this.idade = idade;
        this.nome = nome;
    }

    //Aqui temos um "construtor vazio", ou sem parâmetros. Ao usá-lo, instanciamos e somos obrigados a usar os setters para
    //atribuir valores aos atributos de um objeto
    public Pessoa(){}

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public int getIdade() {
        return idade;
    }
    public void setIdade(int idade) {
        this.idade = idade;
    }

    //Sobrescrita do método toString herdado da classe-mãe Object. Fazemos ele retornar algo mais amigável quando se
    //tratar de um objeto do tipo Pessoa
    @Override
    public String toString() {
        return "Nome: " + this.getNome() + " idade: " + this.getIdade();
    }
}

Saída esperada:

Tamanho da lista: 3
Primeira pessoa da lista: Nome: Thiago idade: 23
[Nome: Thiago idade: 23, Nome: Lucas idade: 18, Nome: João idade: 56]
1 resposta

Olá, Estudante! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de listas para organizar objetos com Java, utilizou muito bem o construtor cheio para inicializar os atributos de forma prática e ainda compreendeu a importância da sobrescrita do método toString para tornar a saída mais legível.

Uma dica interessante para o futuro é utilizar o laço for each para percorrer a lista de pessoas, tornando o código mais simples e expressivo. Assim:

for (Pessoa pessoa : pessoas) {
    System.out.println(pessoa);
}

Isso faz com que cada objeto da lista seja exibido de forma clara, sem precisar acessar índices manualmente.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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