projectlombok plugin org for example baeldung java lombok

plugin - lombok java maven



Lombok alternativas para código claro sin getters/setters/toString/constructors (2)

¿Conoces alguna alternativa lombok? Usando Lombok podemos olvidarnos de la clase de desorden con getters, setters y toString, quiero usarlo en mi proyecto, sin embargo, me pregunto si hay alternativas mejores.

Estoy usando Java 1.7 .. y no puedo cambiar a 1.8.


"Mejor" es bastante polémico aquí, pero una alternativa es AutoValue , disponible AutoValue . Esta presentación explica algunas de las diferencias entre AutoValue y, por ejemplo, Lombok.

En particular, AutoValue enfatiza la inmutabilidad (¡algo bueno, en general!) Y un mínimo de magia extralingüística (muy diferente de Lombok).


Me temo que no hay alternativa a menos que desee cambiar a algo como Scala o esté satisfecho con un conjunto más pequeño de características como las que proporciona AutoValue .

Si bien AutoValue es probablemente lo mejor que puede obtener con Java puro, ofrece

  • @Adquiridor
  • @AllArgsConstructor
  • @EqualsAndHashCode
  • @Encadenar
  • @Constructor

pero se pierde

  • @Marchitar
  • toBuilder
  • @Setter
  • @Delegar
  • @ExtensionMethod
  • Y algunas funciones más que no uso.

Si bien estoy totalmente de acuerdo en que la inmutabilidad es una virtud, a veces no es aplicable. De todos modos, Lombok se esfuerza por soportar la inmutabilidad, incluso se integra con las colecciones inmutables de Guava, y puede escribir

@Builder @Getter public final class Sentence { private final boolean truthValue; @Singular private final ImmutableList<String> words; }

y usalo como

Sentence s = Sentence.builder().truthValue(true) .word("Lombok").word("is").word("cool").build(); assertEquals(3, s.getWords().size());

Nota: no soy el autor, así que puedo decir que es genial.

Para inmutables, @Wither y toBuilder son muy interesantes. El primero le permite crear una copia que difiere en un solo campo y el segundo le brinda un generador que comienza con los valores actuales y es adecuado para cambiar múltiples campos. Las siguientes dos líneas son equivalentes:

o.withA(1).withB(2) o.toBuilder().a(1).b(2).build()

Tanto Lombok como AutoValue usan algo de magia. La magia de este último es el procesamiento de anotaciones estándar, por lo que es bastante robusto. Tiene algunas desventajas como se indica en la página 27 . Yo agregaría el hecho de que se genera un AutoValue_foo que no ordené.

Lombok usa algo de magia negra y, por lo tanto, es mucho más frágil, pero ofrece más y funciona bastante bien.