Empezar con lombok
Qué es lombok[editar]
Lombok es una librería java que al compilar mete automáticamente código en nuestros class. Este código que añade es el código engorroso de hacer a mano, como Getter y Setter, constructores con parámetros, Hashcode y equals, etc. Podemos controlar qué código queremos que se genere y cómo por medio de las anotaciones e lombok.
Veamos algunas de las anotaciones básicas de lombok. Tienes los ejemplos en lombok-example
Anotaciones @Getter y @Setter[editar]
Una de las cosas engorrosas de hacer son los setter y getter de las clases. Con lombok nos bastaría con poner la anotación @Setter y @Getter en la clase para tener métodos setter y getter de todos los atributos
package com.chuidiang.lombok_example;
import lombok.*;
/**
* @author fjabellan
* @date 21/11/2020
*/
@Getter
@Setter
public class Data {
private int anInteger;
private String anString;
}
Listo, con esto deberíamos tener los métodos set y get de anInteger y anString.
Si no los quremos todos, podemos luego añadir excepciones con anotaciones en los atributos concretos. Por ejemplo, si en el código anterior añadimos la siguiente anotación en el atributo anString
@Getter(value=AccessLevel.NONE)
private String anString;
no se generará el getter. Con AccessLevel tenemos además opciones para hacer el getter protegido o privado.
También podemos no poner la anotación Getter y/o Setter en la clase y ponerla en los atributos que nos interesen.
Anotaciones para constructores @AllArgsConstructor y @NoArgsConstructor[editar]
Los constructores que llevan parámetros para meter en los atributos también son bastante repetitivos. Bastaría con poner algo como esto
package com.chuidiang.lombok_example;
import lombok.*;
/**
* @author fjabellan
* @date 21/11/2020
*/
@AllArgsConstructor
@NoArgsConstructor
public class Data {
private int anInteger;
private String anString;
}
Con la anotación @AllArgsConstructor tenemos disponible un constructor con todos los atributos, en el orden que aparecen. Si queremos mantener un constructor sin parámetros, debemos añadir la anotación @NoArgsConstructor
Tenemos otra anotación posible adicional, @RequiredArgsConstructor. Este analiza los atributos de la clase para ver cuales es obligatorio rellenar en el constructor (por ejemplo, atributos final que no estén inicializados) o que tengan la anotación @NonNull
Anotación @ToString[editar]
Podemos hacer de forma fácil un método toString()
package com.chuidiang.lombok_example;
import lombok.*;
/**
* @author fjabellan
* @date 21/11/2020
*/
@ToString
public class Data {
private int anInteger;
private String anString;
}
Esto nos da un método toString que saca todos los atributos. En nuestro ejemplo, la salida del método toString() sería
Data(anInteger=10, anString=10)
suponiendo que hubieramos puesto como valores 10 y "10" para el entero y el string respectivamente.
Podemos decidir qué campos queremos en el toString() en la anotación, poniéndola de esta manera
@ToString(of={"anInteger","anString"})
Anotación @EqualsAndHashCode[editar]
El método equals() y hashCode() se pueden hacer también con anotaciones
package com.chuidiang.lombok_example;
import lombok.*;
/**
* @author fjabellan
* @date 21/11/2020
*/
@EqualsAndHashCode
public class Data {
private int anInteger;
private String anString;
}
esto haría que los métodos equals() y hashCode() tengan en cuenta todos los atributos de la clase para decidir si dos instancias de la clase son iguales o distintas.
De la misma forma que en toString(), podemos decidir qué campos queremos que intervengan en el equals/hashcode.
@EqualsAndHashCode(of={"anInteger"})
Anotación @Data[editar]
Habitualmente una clase puede ser simplemente una estructura de datos y suele ser útil que tenga todo esto: setter, getter, equals y hashcode, constructores y toString. La anotación @Data equivale a todas ellas.
package com.chuidiang.lombok_example;
import lombok.*;
/**
* @author fjabellan
* @date 21/11/2020
*/
@Data
public class Data {
private int anInteger;
private String anString;
}
Con esto tenemos todo, con las opciones por defecto.
Anotación @Slf4j[editar]
Declarar el logger suele ser también un poco engorroso. En cada clase hay que poner algo del estilo
private static final Logger log = LoggerFactory.getLogger(Data.class);
Con lombok y en el caso de usar la librería slf4j para logger, se pondría la anotación así
package com.chuidiang.lombok_example;
import lombok.extern.slf4j.Slf4j;
/**
* @author fjabellan
* @date 21/11/2020
*/
@Slf4j
public class SomeProcess {
public void doSomething(){
log.info("I'm doing something");
}
}
y tenemos el log disponible sin necesidad de declararlo.