Ejemplo de patrón Builder para las clases Record de Java
Escrito por
el .
java
planeta-codigo
Enlace permanente
Comentarios
Java se ha caracterizado por ser un lenguaje verboso y necesitar declarar todo de forma explícita, esto tiene la ventaja de que el código es muy explícito sin apenas convenciones que es necesario conocer para saber cómo se comporta el código. Por el contrario esta verbosidad requiere declarar gran cantidad de código que se hace repetitivo en muchas clases. Los Records de Java 16 permite declarar clases de datos en muy pocas líneas de código, esto lo consiguen introduciendo algunas convenciones que son de uso común en el lenguaje. Un aspecto que no resuelven los Records es el crear clases Builder que son una necesidad asociada para esas clases de datos.
Java desde la versión 8 ha incorporado muchas novedades y con el ciclo de desarrollo de una nueva versión cada seis meses las novedades han sido numerosas y cada poco tiempo. Una de las novedades disponibles en la versión de Java 16 ha sido una especialización de clase, las clases Record.
Aún con todas las novedades que se han incorporando sigue habiendo algunas necesidades que al no estar cubiertas por el propio lenguaje o una clase del JDK, una de ellas relacionada con las clases Record es utilizar el patrón de diseño Builder.
Contenido del artículo
Las clases Record de Java
Las clases Record incorporadas en Java son muy útiles ya que simplifican enormemente el código de esas clases que prácticamente son contenedores de datos. Las clases Record evitan tener que declarar explícitamente los métodos getter para cada una de las propiedades así como los métodos hashCode y equals, métodos que hay implementar correctamente, también evitan declarar el método toString muy útiles para el correcto funcionamiento cuando las clases se añaden en colecciones.
|
|
La definición de una clase Record lo único que requieren prácticamente es declarar las propiedades y sus tipos, con esta definición la clase implícitamente implementa los métodos getter, hashCode, equals y toString, esta clase Record es equivalente a la anterior pero en muchas menos líneas de código.
|
|
Alternativas a Records en versiones anteriores de Java
Usar una de las últimas versiones de Java no es posible en el caso de una aplicación con mucho código existente que usa una versión anterior, a veces no tanto por pasar una nueva versión en el código ya que Java se caracteriza por mantener la compatibilidad hacia atrás sino por alguna dependencia antigua que no es compatible con una versión de Java más reciente o por el entorno de ejecución de la aplicación que ejecutarla sobre una versión más moderna de Java requiere actualizar versiones de librerías que requieren cambios en el código.
Dos librerías como alternativa a los Records utilizables en versiones anteriores de Java 16 son Immutables y Lombok. Ambas proporcionan soporte para evitar mucho del código de las clases Java que se suelen utilizar como contenedores de datos, además proporcionan soporte para crear Builders a partir de ellas.
Aunque Immutables y Lombok son librerías que proporcionan una funcionalidad similar su implementación entre ellas es muy diferente, la implementación de Immutables se realiza generando código con un procesador de anotaciones y Lombok manipula el bytecode de las clases. La aproximación de Immutables es más limpia y potencialmente menos problemática que Lombok pero Lombok es una librería muy popular y sigue utilizándose.
Librería para utilizar el patrón Builder sobre clases Record
No habiendo ninguna restricción para utilizar una versión de Java a partir de la 16 no es necesaria una alternativa a los Records ni requiere dependencias adicionales. Aunque los Records dan solución a una necesidad de crear clases de datos que suelen tener todas las aplicaciones no cubren todas las necesidades como es el caso de crear instancias con una clase Builder.
Hay una librería RecordBuilder para disponer de la funcionalidad del patrón Builder para las clases Record. Con leer el archivo README.md del repositorio Git es más que suficiente para conocerlo todo sobre como usarlo.
Ejemplo de patrón Builder con clase Record
El uso de la librería RecordBuilder para generar clases que implementan el patrón Builder es muy sencillo una vez están definidas las clases Record, basta con anotarlas con la anotación RecordBuilder.
|
|
|
|
|
|
Como ocurre con cualquier otra librería hay que incluirla como dependencia del proyecto en este caso con la herramienta de construcción Gradle.
|
|
El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando siguiente comando:./gradlew run