El post de hoy es especial para Androideros experimentados, y está a cargo de Diego Freniche, experto desarrollador multiplataforma e Instructor del Curso de Programación Android Intermedio en KeepCoding.
Conoce el Proyecto Lombok y descubre cómo te ayudará a optimizar líneas de código en tu desarrollo.
En este post encontrarás:
ocultar
Comenzamos con un ejemplo de Lombok
Supongamos que queremos trabajar con datos de personas. Podemos definirnos una clase de la siguiente forma: A esta clase, conocida como un POJO (objeto java de toda la vida) podemos añadirle bien a mano, bien con ayuda de nuestro IDE favorito los getters y setters públicos para convertirla en un JavaBean. El problema es que esos @getter @setter lombok muchas veces no aportan demasiado (otras veces sí, ojo). Y terminamos con código de relleno como://java lombok setter
Y sí, los IDEs actuales nos hacen este trabajo. Pero ese código siempre estará ahí. Al leerlo. ¿No sería posible prescindir de este «código de relleno» pero tener todas las ventajas de losgetters y setters? ¿Y si pudiéramos tener otras ventajas? Por ejemplo, la implementación de hashcode o equals en nuestra clase. Bien, pues todo esto nos lo permite hacer el Proyecto Lombok. Para que funcione, necesitamos añadir la librería de Lombok a nuestro proyecto, bien descargando y añadiendo el jar correspondiente o bien usando Gradle. Si usas Eclipse, lo mejor es descargar lombok.jar y ejecutarlo (modificará tu Eclipse para que Lombok funcione)Getters y Setters
Las anotaciones @Getter y @Setter hacen exactamente lo que su nombre sugiere: añaden para nosotros un getter / setter para cada propiedad. En este ejemplo, la propiedad zipCode no tiene getter definido. Así podremos escribir algo como:Otras perlas
Lombok dispone además de anotaciones para impedir que una propiedad sea nula, como @NonNull o @ToString para generar este método con los campos que le digamos. Pero la mejor puede que sea @EqualsAndHashCode que nos evita tener que escribir implementaciones de estos métodos, algo necesario si queremos serializar nuestra clase, o usarla en una estructura de datos que maneje hashes de los objetos. Así, si escribimos: Podemos usar toString mediante System.out.println(diego.toString()); que devuelve (la edad no está incluida): Y si intentamos establecer el nombre a null, como es Non-Nullable nos encontraremos con una excepción:@Data: I want it all
@Data nos da de golpe:- @EqualsAndHashCode
- @Getter y @Setter para todas las propiedades
- @ToString
- Un constructor público con todas los propiedades no marcadas como @NonNull.