jueves, 4 de mayo de 2023

Lombok - Ejemplos practicos utiles para tu desarrollo en Java

 Lombok es un proyecto que tiene la finalidad facilitar el desarrollo de software en Java y escribir menos codigo y hacer mas, cosa que es muy bueno.


@Getter and @Setter

Si bien los entornos de desarrollo nos permite generar los getter y setter con un par de click, Lombok nos permite anotar cualquier campo con las anotaciones Getter y Setter para generar automáticamente

Los métodos get y set serán públicos a no ser que se especifique pasándole un parámetro a la anotación a través de la clase AccessLevel. Los niveles de acceso que se permiten son PUBLIC, PROTECTED, PACKAGE y PRIVATE.

Adicionalmente también podemos desactivar la generación de los métodos _get y set para un determinado campo si ponemos el nivel de acceso NONE.

Debemos de tener en cuenta que en los método anotados con @Getter podemos indicar el parámetros “lazy” que actúa de forma similar a como se hace desde JPA al anotar los campos de una entidad

De esta manera el valor de dicho campo se almacenará en caché y solo se calcula una vez, ideal para archivos pesados.


@ToString

Cualquier clase puede ser anotada con @ToString para generar una implementación del método toString (). De forma predeterminada, imprimirá el nombre de la clase, junto con cada campo, en orden, separados por comas.

El parámetro includeFieldNames, lo cual nos puede dar mayor legibilidad.

Por defecto, se imprimirán todos los campos no estáticos. Si desea omitir algunos campos, puede anotar estos campos con @ToString.Exclude.

De forma alternativa, puede especificar exactamente qué campos desea utilizar con onlyExplicitlyIncluded = true y luego marcar cada campo que desee incluir con @ToString.Include.

También podemos obtener el resultado del método ToString de la clase super indicando el parámetro callSuper=true.


@NonNull

El parámetro de entrada de un método o de un constructor conseguimos despreocuparnos del checkeo de que ese parámetro de entrada sea nulo. Esta anotación realiza esta sentencia:

if (parametro == null) throw new NullPointerException("parametro");

Para los constructores el chequeo se realizará inmediatamente después de cualquier llamada al this() o super().

 

@EqualsAndHashCode

Genera los métodos equals() y hashCode() a partir de los campos del objeto. De forma predeterminada para generar estos métodos utiliza todos los campos de la clase no transitorios y no estáticos, aunque podemos modificar los campos que se utilizan utilizando @EqualsAndHashCode.Include o @EqualsAndHashCode.Exclude.

Si utilizamos el Include adicionalmente tenemos que indicar lo siguiente onlyExplicitlyIncluded = true

 

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

Genera constructores que no toman argumentos, un argumento por campo final/no nulo, o un argumento por cada campo.

  • @NoArgsConstructor generará un constructor sin parámetros. Si esto no es posible (debido a los campos finales), en su lugar se producirá un error de compilación, a menos que se utilice @NoArgsConstructor (force = true).

Luego todos los campos finales se inicializan con 0/falso/nulo. Para los campos con restricciones, como los campos @NonNull, no se genera ninguna verificación, así que tenga en cuenta que estas restricciones generalmente no se cumplirán hasta que esos campos se inicien correctamente más tarde.

  • @RequiredArgsConstructor genera un constructor con un parámetro para cada campo que requiere un manejo especial. Todos los campos finales no inicializados obtienen un parámetro, así como también los campos que están marcados como @NonNull que no se inicializan donde se declaran.
  • @AllArgsConstructor genera un constructor con un parámetro para cada campo en su clase.

Cada una de estas anotaciones permite una forma alternativa, donde el constructor generado es siempre privado, y se genera un método estático adicional que envuelve al constructor privado.

 

@Data

@Data es la anotación de acceso directo que agrupa las características de @ToString, @EqualsAndHashCode, @Getter/@Setter y @RequiredArgsConstructor juntas: en otras palabras, @Data genera todos los estándares que normalmente se asocian con POJOS y beans:

  • Getters para todos los campos.
  • Setters para todos los campos no finales y las implementaciones toString.
  • Equals y hashCode que involucran los campos de la clase.
  • Un constructor que inicializa todos los campos finales.
  • Así como todos los campos no finales sin inicializador que haya sido marcado con @NonNull, para garantizar que el campo nunca sea nulo.

 

 

 

 

 

Generar JavaDoc con maven

Hay una manera rapida y eficaz para poder generar la documentacion javadoc usando maven. 

Recordar que tu codigo debe tener los siguientes comentarios

 /** 

         Ejemplo de documentacion JavaDoc 

*/ 

 

Se debe ejecutar el siguiente comando: mvn javadoc:javadoc

 Esto generara la documentacion en la siguiente carpeta target/site/apidocs 

Puedes cambiar la carpeta por medio de la configuracion del plugin en la siguiente entrada reportOutputDirectory 

Espero que les sirva de ayuda Recordar que es importante la documentacion para el resto de los desarrolladores que van a mantener tu codigo.