Las clases ``record`` son una implementación de las data-clases o del patrón Data Transfer Object, un tipo de clase cuyo único propósito es impulsar la programación con datos inmutables.
Son clases que se usan para almacenar valores y poder agruparlos en un único identificador.
A diferencia de una clase normal, el ``record`` es inmutable.
Además que automáticamente genera métodos como equals(), hashCode() y toString().
Miremos un ejemplo.
Auditor.java
package com.mx.inforhomex; /** * * @author Alquimista de código * */ public record Auditor{ }
Modificamos la clase ``record`` agregando tres campos:
- nombre de tipo String.
- fchreg de tipo LocalDate.
- horreg de tipo LocalTime.
Clase ``record`` modificada:
package com.mx.inforhomex; import java.time.LocalDate; import java.time.LocalTime; /** * * @author Alquimista de código * */ public record Auditor(String nombre, LocalDate fchreg, LocalTime horreg){ }
Cuando compilamos, se crearán los métodos setters (más no los getters) y, como mencionamos, los métodos equals(), hashCode() y toString() también serán generados.
Si vieramos la clase de la forma clásica obtendríamos lo siguiente:
package com.mx.inforhomex; import java.time.LocalDate; import java.time.LocalTime; public class Auditor{ private String nombre; private LocalDate fchreg; private LocalTime horreg; public Auditor(){} public Auditor(String nombre, LocalDate fchreg,LocalTime horreg ){ this.nombre = nombre; this.fchreg = fchreg; this.horreg ? horreg; } // Métodos getters and setters // Métodos equals(), hashCode() y toString() }
Esta "nueva" característica nació en la versión de Java 14, pero ha cobrado más fuerza en la versión Java 21.
Ahora crearemos una clase para probar nuestra clase (TestAuditor.java) ``record``.
package com.mx.inforhomex; import java.time.LocalDate; import java.time.LocalTime; public class TestAuditor{ public static void main(String[] args) { LocalDate hoy = LocalDate.now(); LocalTime hora = LocalTime.now(); String nombre = "Auditoria de Sistemas"; var auditor = new Auditor(nombre, hoy, hora); System.out.println("Auditoria: "+auditor); } }
Compilamos y ejecutamos:
$ javac TestAuditor.java $ java TestAuditor
Salida:
Auditoria: Auditor[nombre=Auditoria de Sistemas, fchreg=2025-02-01, horreg=18:36:56.613307]
También podemos crear clases ``record`` internas.
Dentro de la clase TestAuditor.java agregamos un método estático donde crearemos una.
public static void hacerAlgo(){ record Registro(String user, Boolean isActivo){} var myReg = new Registro("Root", true); if(myReg.isActivo){ System.out.println("Registro:\n"+myReg); } } }
El código completo será este:
package com.mx.inforhomex; import java.time.LocalDate; import java.time.LocalTime; public class TestRecord{ public static void main(String[] args) { LocalDate hoy = LocalDate.now(); LocalTime hora = LocalTime.now(); String nombre = "Auditoria de Sistemas"; var auditor = new Auditor(nombre, hoy, hora); System.out.println("Auditoria: "+auditor); hacerAlgo(); } public static void hacerAlgo(){ /** Donde creamos la nueva clase ``record`` Registro **/ record Registro(String user, Boolean isActivo){} var myReg = new Registro("Root", true); if(myReg.isActivo){ System.out.println("Registro:\n"+myReg); } } }
Si te interesa saber más, puedes ver los enlaces de abajo.
Enlaces:
https://master-spring-ter.medium.com/understanding-java-records-a-detailed-guide-510ce4a1bc42https://dzone.com/articles/what-are-java-records
https://www.makigas.es/series/records-en-java/records-de-java-que-son-y-como-usarlos
https://www.baeldung.com/java-record-keyword
Comentarios
Publicar un comentario