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
Pessoae ter os componentesnomeeidade. - O programa deve criar duas instâncias diferentes e imprimir seus
toString. - O programa deve comparar as duas instâncias com
equalse 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
- Declaramos
public record Pessoa(String nome, int idade) {}. Isso cria uma classe imutável com dois campos. - O compilador gera automaticamente o construtor
Pessoa(String nome, int idade). - Também são gerados os métodos de acesso
nome()eidade(), além detoString,equalsehashCode. - No
main, criamos duas instâncias:p1ep2. System.out.println(p1)chama otoStringgerado, que exibePessoa[nome=Ana, idade=25].p1.equals(p2)compara os valores dos campos; como são diferentes, retornafalse.
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
staticdentro 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 nomain, declare comostaticou fora da classe.
Errado:public record Pessoa(...) {}dentro deMainsemstatic(em contexto não estático).
Correto:public static record Pessoa(...) {}ou coloque fora da classeMain. - 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