Ir al contenido principal

Java: clases record

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-510ce4a1bc42
https://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

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...