Fácil Java

Criando um record para representar uma pessoa

Enunciado

Crie um record chamado Pessoa que armazene nome (String) e idade (int). No método main, crie duas instâncias, imprima seus toString, e compare-as com equals.

Requisitos

  • O record deve se chamar Pessoa e ter os componentes nome e idade.
  • O programa deve criar duas instâncias diferentes e imprimir seus toString.
  • O programa deve comparar as duas instâncias com equals e imprimir o resultado.

Código inicial

public class Main {
    // Defina o record Pessoa aqui

    public static void main(String[] args) {
        // Crie duas pessoas e teste toString e equals
    }
}

Saída esperada

Pessoa[nome=Ana, idade=25]
Pessoa[nome=Beto, idade=30]
Iguais? false
Ver dica

Lembre-se de que o record já fornece automaticamente o construtor, os acessores e os métodos toString e equals.

Mostrar solução
public class Main {
    // Declaração do record Pessoa
    public record Pessoa(String nome, int idade) {}

    public static void main(String[] args) {
        // Criando instâncias
        Pessoa p1 = new Pessoa("Ana", 25);
        Pessoa p2 = new Pessoa("Beto", 30);

        // Imprimindo toString
        System.out.println(p1);
        System.out.println(p2);

        // Comparando com equals
        System.out.println("Iguais? " + p1.equals(p2));
    }
}

Passo a passo

  1. Declaramos public record Pessoa(String nome, int idade) {}. Isso cria uma classe imutável com dois campos.
  2. O compilador gera automaticamente o construtor Pessoa(String nome, int idade).
  3. Também são gerados os métodos de acesso nome() e idade(), além de toString, equals e hashCode.
  4. No main, criamos duas instâncias: p1 e p2.
  5. System.out.println(p1) chama o toString gerado, que exibe Pessoa[nome=Ana, idade=25].
  6. p1.equals(p2) compara os valores dos campos; como são diferentes, retorna false.

Por que funciona

Records são perfeitos para representar dados imutáveis de forma concisa. O compilador gera todo o código boilerplate, garantindo que a comparação seja baseada nos valores dos campos, não na identidade dos objetos. Isso segue o conceito de Value Object.

Erros comuns

  • Esquecer de declarar o record como static dentro de outra classe: Se você declarar um record dentro de uma classe não estática, ele será uma classe interna e precisará de uma instância da classe externa. Para usar no main, declare como static ou fora da classe.
    Errado: public record Pessoa(...) {} dentro de Main sem static (em contexto não estático).
    Correto: public static record Pessoa(...) {} ou coloque fora da classe Main.
  • Tentar modificar os campos após a criação: Records são imutáveis, então não há setters.
    Errado: p1.nome = "Outro";
    Correto: crie uma nova instância.
  • Achar que toString é opcional: Ele é gerado automaticamente, mas se você sobrescrever, deve seguir o contrato.

Outra forma de resolver

Se precisar de mais flexibilidade (como adicionar setters), use uma classe tradicional:

public class Pessoa {
    private String nome;
    private int idade;
    // construtor, getters, setters, equals, hashCode, toString...
}

Mas records são preferíveis para dados imutáveis.

Saída esperada

Pessoa[nome=Ana, idade=25]
Pessoa[nome=Beto, idade=30]
Iguais? false