Con la introducción de los records en Java 14 como una feature en vista previa y su estandarización en Java 16, ahora es más fácil crear clases inmutables de manera concisa y sin la sobrecarga de escribir código repetitivo.
Un record es una clase especial diseñada para almacenar datos de manera inmutable. Se encarga automáticamente de generar los métodos equals(), hashCode(), toString() y los accesores (`getters`) sin necesidad de escribir código adicional.
Veamos un ejemplo:
public record Usuario(String nombre, String email, int edad) {}
La declaración anterior equivale a escribir lo siguiente en una clase tradicional:
public final class Usuario {
private final String nombre;
private final String email;
private final int edad;
public Usuario(String nombre, String email, int edad) {
this.nombre = nombre;
this.email = email;
this.edad = edad;
}
public String nombre() { return nombre; }
public String email() { return email; }
public int edad() { return edad; }
@Override
public boolean equals(Object o) { /* Implementación automática */ }
@Override
public int hashCode() { /* Implementación automática */ }
@Override
public String toString() { /* Implementación automática */ }
}
Veamos como usar un record:
public class Main {
public static void main(String[] args) {
Usuario usuario = new Usuario("Juan Pérez", "juan.perez@example.com", 30);
System.out.println(usuario);
}
}
Salida:
Usuario[nombre=Juan Pérez, email=juan.perez@example.com, edad=30]
Se puede agregar métodos adicionales si es necesario:
public record Usuario(String nombre, String email, int edad) {
public boolean esMayorDeEdad() {
return edad >= 18;
}
}
Los record en Java son una herramienta poderosa para definir estructuras de datos inmutables de forma concisa y eficiente. Gracias a ellos, el código es más limpio, menos propenso a errores y más fácil de mantener.