Acabo de empezar a usar Lombok hoy. Hasta ahora me gusta, pero un inconveniente que no vi mencionado fue la refactorización del soporte.
Si tiene una clase anotada con @Data
, generará los captadores y establecedores para usted en función de los nombres de campo. Si usa uno de esos captadores en otra clase, luego decida que el campo tiene un nombre incorrecto, no encontrará usos de esos captadores y establecedores y reemplazará el nombre antiguo con el nuevo nombre.
Me imagino que esto debería hacerse a través de un complemento IDE y no a través de Lombok.
ACTUALIZACIÓN (22 de enero de 13)
Después de usar Lombok durante 3 meses, todavía lo recomiendo para la mayoría de los proyectos. Sin embargo, encontré otro inconveniente que es similar al mencionado anteriormente.
Si tiene una clase, digamos MyCompoundObject.java
que tiene 2 miembros, ambos anotados con @Delegate
, digamos myWidgets
y myGadgets
, cuando llama myCompoundObject.getThingies()
desde otra clase, es imposible saber si está delegando al Widget
o Gadget
porque ya no puede saltar a la fuente dentro del IDE.
Usar el "Generar métodos de delegado ..." de Eclipse le proporciona la misma funcionalidad, es igual de rápido y proporciona un salto de origen. La desventaja es que satura tu fuente con código repetitivo que quita el foco de las cosas importantes.
ACTUALIZACIÓN 2 (26 de febrero de 13)
Después de 5 meses, todavía estamos usando Lombok, pero tengo algunas otras molestias. La falta de un getter & setter declarado puede ser molesto a veces cuando intentas familiarizarte con el nuevo código.
Por ejemplo, si veo un método llamado getDynamicCols()
pero no sé de qué se trata, tengo que superar algunos obstáculos adicionales para determinar el propósito de este método. Algunos de los obstáculos son Lombok, otros son la falta de un complemento inteligente de Lombok. Los obstáculos incluyen:
- La falta de JavaDocs. Si javadoc el campo, espero que el getter y setter hereden ese javadoc a través del paso de compilación de Lombok.
- Saltar a la definición del método me lleva a la clase, pero no a la propiedad que generó el captador. Este es un problema de complemento.
- Obviamente, no puede establecer un punto de interrupción en un captador / definidor a menos que genere o codifique el método.
- NOTA: Esta búsqueda de referencia no es un problema como pensé por primera vez. Sin embargo, debe utilizar una perspectiva que habilite la vista Esquema. No es un problema para la mayoría de los desarrolladores. Mi problema era que estaba usando Mylyn, que estaba filtrando mi
Outline
vista, por lo que no vi los métodos. Falta de búsqueda de referencias. Si quiero ver quién llama getDynamicCols(args...)
, tengo que generar o codificar el setter para poder buscar referencias.
ACTUALIZACIÓN 3 (7 de marzo de 13)
Supongo que aprender a usar las diversas formas de hacer las cosas en Eclipse. En realidad, puede establecer un punto de interrupción condicional (BP) en un método generado por Lombok. Con la Outline
vista, puede hacer clic con el botón derecho en el método Toggle Method Breakpoint
. Luego, cuando golpee el BP, puede usar la Variables
vista de depuración para ver cómo el método generado nombró los parámetros (generalmente el mismo que el nombre del campo) y finalmente, usar la Breakpoints
vista para hacer clic derecho en el BP y seleccionar Breakpoint Properties...
para agregar una condición. Agradable.
ACTUALIZACIÓN 4 (16 de agosto de 13) A
Netbeans no le gusta cuando actualiza sus dependencias de Lombok en su pompón Maven. El proyecto aún se compila, pero los archivos se marcan por tener errores de compilación porque no puede ver los métodos que Lombok está creando. Borrar el caché de Netbeans resuelve el problema. No estoy seguro si hay una opción de "Proyecto limpio" como la hay en Eclipse. Problema menor, pero quería darlo a conocer.
ACTUALIZACIÓN 5 (17 de enero de 14)
Lombok no siempre juega bien con Groovy, o al menos con el groovy-eclipse-compiler
. Es posible que deba degradar su versión del compilador.
Maven Groovy y Java + Lombok
ACTUALIZACIÓN 6 (26 de junio de 2014)
Una palabra de advertencia. Lombok es un poco adictivo y si trabajas en un proyecto en el que no puedes usarlo por alguna razón, te molestará. Puede que sea mejor que nunca lo uses.
ACTUALIZACIÓN 7 (23 de julio de 14)
Esta es una actualización un poco interesante porque aborda directamente la seguridad de adoptar Lombok sobre la que el OP preguntó.
A partir de v1.14, la @Delegate
anotación se ha degradado a un estado Experimental. Los detalles están documentados en su sitio ( Lombok Delegate Docs ).
La cuestión es que, si estaba usando esta función, sus opciones de retroceso son limitadas. Veo las opciones como:
- Elimine manualmente las
@Delegate
anotaciones y genere / codifique manualmente el código delegado. Esto es un poco más difícil si estaba utilizando atributos dentro de la anotación.
- Elimine los archivos que tienen la
@Delegate
anotación y quizás vuelva a agregar las anotaciones que desee.
- Nunca actualice Lombok ni mantenga una bifurcación (ni viva utilizando funciones experimentales).
- Delombok todo su proyecto y deje de usar Lombok.
Por lo que puedo decir, Delombok no tiene una opción para eliminar un subconjunto de anotaciones ; es todo o nada al menos para el contexto de un solo archivo. Abrí un ticket para solicitar esta función con las banderas de Delombok, pero no esperaría eso en el futuro cercano.
ACTUALIZACIÓN 8 (20 de octubre de 2014)
Si es una opción para usted, Groovy ofrece la mayoría de los mismos beneficios de Lombok, además de una gran cantidad de otras características, incluido @Delegate . Si usted cree que tendrá dificultades para vender la idea a los poderes fácticos, echar un vistazo a la @CompileStatic
o @TypeChecked
anotación para ver si eso puede ayudar a su causa. De hecho, el enfoque principal de la versión Groovy 2.0 fue la seguridad estática .
ACTUALIZACIÓN 9 (1 de septiembre de 2015)
Lombok aún se mantiene y mejora activamente , lo que es un buen augurio para el nivel de seguridad de la adopción. Las anotaciones de @Builder son una de mis nuevas funciones favoritas.
ACTUALIZACIÓN 10 (17 de noviembre de 2015)
Esto puede no parecer directamente relacionado con la pregunta del OP, pero vale la pena compartirlo. Si está buscando herramientas que lo ayuden a reducir la cantidad de código repetitivo que escribe, también puede consultar Google Auto , en particular AutoValue . Si nos fijamos en su plataforma de diapositivas , la lista de Lombok como una posible solución al problema que están tratando de resolver. Los inconvenientes que enumeran para Lombok son:
- El código insertado es invisible (no puede "ver" los métodos que genera) [nota ed - en realidad puede, pero solo requiere un descompilador]
- Los hacks del compilador no son estándar y son frágiles.
- "En nuestra opinión, su código ya no es realmente Java"
No estoy seguro de cuánto estoy de acuerdo con su evaluación. Y dados los inconvenientes de AutoValue que están documentados en las diapositivas, me quedaré con Lombok (si Groovy no es una opción).
ACTUALIZACIÓN 11 (8 de febrero de 16)
Descubrí que Spring Roo tiene algunas anotaciones similares . Me sorprendió un poco descubrir que Roo sigue siendo una cosa y encontrar documentación para las anotaciones es un poco difícil. La eliminación tampoco parece tan fácil como de-lombok. Lombok parece ser la opción más segura.
ACTUALIZACIÓN 12 (17 de febrero de 16)
Mientras trataba de encontrar justificaciones de por qué es seguro traer a Lombok para el proyecto en el que estoy trabajando actualmente, encontré una pieza de oro que se agregó con v1.14
- El sistema de configuración ! Esto significa que puede configurar un proyecto para deshabilitar ciertas funciones que su equipo considera inseguras o indeseables. Mejor aún, también puede crear configuraciones específicas de directorio con diferentes configuraciones. Esto es IMPRESIONANTE.
ACTUALIZACIÓN 13 (4 de octubre de 16)
Si este tipo de cosas son importantes para usted, Oliver Gierke sintió que era seguro agregar Lombok a Spring Data Rest .
ACTUALIZACIÓN 14 (26 de septiembre de 17)
Como señaló @gavenkoa en los comentarios sobre la pregunta de los OP, el soporte del compilador JDK9 aún no está disponible (Número 985). También parece que no será una solución fácil para el equipo de Lombok.
ACTUALIZACIÓN 15 (26 de marzo de 18)
El registro de cambios de Lombok indica a partir de v1.16.20 " Compilar lombok en JDK1.9 ahora es posible " a pesar de que el # 985 todavía está abierto.
Sin embargo, los cambios para acomodar JDK9 requirieron algunos cambios importantes; todo aislado a los cambios en los valores predeterminados de configuración. Es un poco preocupante que introdujeron cambios importantes, pero la versión solo superó el número de versión "Incremental" (pasando de v1.16.18 a v1.16.20). Dado que esta publicación fue sobre la seguridad, si tuviera un yarn/npm
sistema de compilación similar que se actualizara automáticamente a la última versión incremental, es posible que se encuentre con un rudo despertar.
ACTUALIZACIÓN 16 (9 de enero de 19)
Parece que los problemas de JDK9 se han resuelto y Lombok funciona con JDK10, e incluso JDK11 hasta donde puedo decir.
Sin embargo, una cosa que noté que era preocupante por un aspecto de seguridad es el hecho de que el registro de cambios que va de v1.18.2 a v1.18.4 enumera dos elementos como BREAKING CHANGE
! No estoy seguro de cómo ocurre un cambio importante en una actualización de "parche" de semver. Podría ser un problema si usa una herramienta que actualiza automáticamente las versiones de parches.
javac
para abrir el acceso a lassun.*
clases internas ((