Records

Definição

  • A partir do Java 14 é possível criar classes imutáveis de forma concisa.

  • Os registros Records simplificam a criação de classes que representam dados e incluem automaticamente métodos como equals(), hashcode(), toString() e métodos de acesso

public record Pessoa (String nome, int idade) {}
// criando uma instância do registros
Pessos pessoa = new Pessoa("Alice",30);

// acessando os campos do registro
String nome = pessoa.nome();
int idade = pessoa.idade();

// usando o método gerado automaticamente toString()
System.out.println(pessoa); // saída: Pessoa[nome=Alice, idade=30]
  • Classe pessoa (muito verboso)

    • Record substitui toda a implementação abaixo.

import java.util.Objects;

public class Pessoa {

    private String nome;
    private int idade;
    
    // construtor
    public Pessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }
    
    // métodos de acesso para o campo nome
    public String getNome() {
        return nome;
    }
    
    public void setNome() {
        this.nome = nome;
    }
    
    // métodos de acesso para o campo idade
    public int getIdade() {
        return idade;
    }
    
    public void setIdade() {
        this.idade = idade;
    }
    
    // método equals para comparar objetos Pessoa
    @Override
    public boolean equals(Object o) {
        
        if (this == o) 
            return true;    
            
        if ( (o == null) || (getClass() != o.getClass())
            return false;
        
        Pessoa pessoa = (Pessoa) o;
        
        return idade == pessoa.idade && Object.equals(nome, pessoa.nome);
    }
    
    // método hashCode para gerar um código hash para objetos Pessoa
    @Override
    public int hashCode() {
        return Objects.hash(nome,idade);
    }
    
    // método toString para retornar uma representação de string da Pessoa
    @Override
    public String toString() {
        return 
            String.format("Pessoa{nome=%s,idade=%s}",nome,idade);
    }

}

Classes vs Records

Tabela Comparativa

Aspecto
Classes
Records

Definição

Define um novo tipo de objeto com campos e métodos personalidados

Define uma nova forma de dados imutáveis, principalmente para armazenamento de dados

Mutabilidade

Pode ser mutável ou imutável, dependendo da implementação

Sempre imutável por padrão

Herança

Pode estender outras classes e implementar interfaces

Não pode estender outras classes, mas pode implementar interfaces

Método Adicional

Pode ter qualquer número de métodos com comportamento personalizado

Pode ter métodos adicionais, mas geralmente usados para funcionalidades básicas relacionadas aos dados

Acesso a Membros

Pode ter controle granular sobre acesso aos seus membros (encapsulamento)

Sempre transparente - componentes (campos) s~´ao sempre acessíveis diretamente

Controle de Comportamento Adicional

Pote ter comportamentos personalizados adicionais em seus métodos

Comportamentos adicionais são normalmente associados à manipulação de dados

Equals, HashCode e ToString

Precisa ser implementado manualmente para garantir a lógica de igualdade correta

Gerado automaticamente a partir dos componentes (campos)

Last updated