Records para simplificar código inmutable en Java
Clase 23 de 31 • Curso de Java
Resumen
Domina la simplificación de tu código Java utilizando records, una poderosa estructura introducida desde la versión dieciséis. Los records son ideales para representar datos que no necesitas modificar nunca, evitando muchísimas líneas de código repetido y fomentando buenas prácticas modernas.
¿Qué es un record en Java y para qué sirve?
Un record permite definir una clase inmutable de manera sencilla, perfecta para almacenar datos que no deben cambiar. Cuando defines un record, Java genera automáticamente:
- Un constructor con los parámetros especificados.
- Métodos de acceso, similares a getters.
- Los métodos equals, toString y hashCode sin necesidad de escribirlos manualmente.
Este recurso es especialmente útil para representar objetos "ligeros" o versiones resumidas de una entidad más grande, como una película con solo su título, duración y género.
¿Cómo se define un record en Java?
Al crear un record, el formato es algo especial. Utilizas la palabra record
antes del nombre y defines los atributos entre paréntesis, por ejemplo:
public record ResumenContenido(String título, int duración, String género) {}
Los atributos pueden escribirse en una sola línea o separados para mayor legibilidad. Solo necesitas declarar los datos esenciales; al ser inmutables, los records no incluyen setters.
¿Cómo usar records para obtener listas resumidas de datos?
Supongamos que ya tienes una clase Película
con muchos atributos, pero necesitas una versión simple solo con algunos campos. Puedes crear métodos que devuelvan listas de tu nuevo record a partir de una colección más grande:
- Dentro del método en la clase correspondiente, utiliza un stream para transformar tus datos.
- Por ejemplo:
return contenidos.stream()
.map(c -> new ResumenContenido(c.getTítulo(), c.getDuración(), c.getGénero()))
.collect(Collectors.toList());
Así, a partir de una lista de películas completas, generas una lista más ligera.
¿Cómo acceder y mostrar datos en records?
Una vez tienes una lista de records, puedes acceder fácilmente a cada atributo por su nombre (no tienen prefijo get):
for (ResumenContenido resumen : contenidosResumidos) {
System.out.println(resumen.título());
// Puedes imprimir todo el objeto usando toString:
System.out.println(resumen);
}
El método toString de los records se genera solo y muestra directamente sus valores en formato fácil de leer.
¿Qué ventajas ofrecen los records y cuándo usarlos?
Los records permiten mantener el código limpio, corto y fácil de entender cuando representas datos inmutables, como DTOs o elementos sin lógica de validación. Te ahorras los constructores, getters y otros métodos, facilitando el mantenimiento del código.
¿Te animas a probar records en tus proyectos Java? Comparte tus experiencias creando tus propios DTOs o versiones "light" con esta técnica.