Palavra-chave record

A palavra-chave record foi introduzida no Java 14 como uma prévia e se tornou uma funcionalidade estável no Java 16. Ela fornece uma forma concisa de criar classes que são usadas principalmente para armazenar dados imutáveis.

O que é um record?

  • record é uma nova forma de declaração de classe que simplifica a criação de classes de dados imutáveis.
  • Um record automaticamente fornece implementações de métodos importantes, como equals(), hashCode(), e toString(), baseados nos campos do record.

Sintaxe Básica:

public record NomeDoRecord(TipoCampo1 campo1, TipoCampo2 campo2) {
    // Corpo do record
}

Exemplo:

public record Pessoa(String nome, int idade) {
}

Nesse exemplo:

  • Pessoa é um record com dois campos: nome e idade.
  • record automaticamente cria um construtor que recebe esses dois parâmetros e inicializa os campos.

Principais Características:

  1. Imutabilidade:
    • Os campos de um record são final e não podem ser modificados depois de definidos.
  2. Construtor:
    • Um record fornece automaticamente um construtor que inicializa todos os campos.
  3. Métodos:
    • equals() e hashCode() são gerados com base nos campos do record.
    • toString() é gerado para representar o record de forma legível.
  4. Desconstrução:
    • É possível acessar os campos de um record diretamente por métodos gerados automaticamente.
  5. with:
    • Permite criar uma cópia do record com um campo modificado.

Exemplos Práticos:

1.Criação e Uso do Record:

public record Pessoa(String nome, int idade) {
}

public class Main {
    public static void main(String[] args) {
        Pessoa pessoa = new Pessoa("João", 30);
        System.out.println(pessoa.nome()); // Saída: João
        System.out.println(pessoa.idade()); // Saída: 30
    }
}

2.Desconstrução:

public record Pessoa(String nome, int idade) {
}

public class Main {
    public static void main(String[] args) {
        Pessoa pessoa = new Pessoa("Maria", 25);
        var (nome, idade) = pessoa; // Desconstrução
        System.out.println(nome); // Saída: Maria
        System.out.println(idade); // Saída: 25
    }
}

3.Uso do Método with:

public record Pessoa(String nome, int idade) {
}

public class Main {
    public static void main(String[] args) {
        Pessoa pessoa1 = new Pessoa("Ana", 40);
        Pessoa pessoa2 = pessoa1.withIdade(41); // Cria uma nova instância com idade modificada
        System.out.println(pessoa1); // Saída: Pessoa[nome=Ana, idade=40]
        System.out.println(pessoa2); // Saída: Pessoa[nome=Ana, idade=41]
    }
}

Uso e Benefícios:

  • record é ideal para casos onde você precisa de classes simples para armazenar dados sem a necessidade de implementar manualmente métodos comuns como equals() e hashCode().
  • record promove a clareza e a redução de código boilerplate, tornando o código mais limpo e legível.

O uso de record pode melhorar a manutenção e a compreensão do código ao fornecer uma maneira direta de criar classes de dados imutáveis com um conjunto padrão de comportamentos.