Si no te gustan los videos sigue
las instrucciones a continuación.
Conceptos
Para entender bien algunos de los conceptos de las lecciones venideras,
has de saber cómo funcionan las propiedades en Java. La forma estándar de
definir una propiedad en Java es:
// Propiedad
private int cantidad; // Tiene un campo
public int getCantidad() { // Un getter para devolver el valor del campo
return cantidad;
}
public void setCantidad(int cantidad) { // Cambia el valor del campo
this.cantidad = cantidad;
}
Esto se basa en la idea de que nunca deberiamos acceder al estado
de un objeto (sus campos) directamente, sino siempre llamando a métodos.
Esto es muy útil porque puedes cambiar la implementación de una propiedad
sin afecta al codigo que la usa. Además, todas las herramientas, marcos de
trabajo y librerias del ecosistema Java confían en esta norma (parte de
las especificaciones JavaBeans). Por lo tanto, deberiamos usar esta
convención siempre. Una propiedad en Java es un método getter (
getCantidad()
por ejemplo) y un método setter (
setCantidad(int cantidad)) si la
propiedad es modificable. De hecho, el campo (
private int cantidad
en este caso) no es necesario.
El problema de este enfoque es que es muy verboso y acabamos con nuestro
código lleno de getters y setters que no aportan nada y hacen mucho ruido.
Para resolver este problema usamos una librería llamada Lombok. Con Lombok
puedes definir la propiedad
cantidad de arriba de esta manera:
@Getter @Setter // Genera un método getter y uno setter
int cantidad;
@Getter y
@Setter generan el getter y setter en el
código compilado, por lo que cuando accedas a la propiedad has de usarlos,
así:
int c = elObjeto.getCantidad(); // Nunca int c = elObjeto.cantidad
elObjeto.setCantidad(c + 10); // Nunca elObjeto.cantidad = c + 10
Puedes declarar
@Getter y
@Setter a nivel de clase
y así todos los campos tendrán getter y setter automáticamente. Y por
supuesto, puedes escribir tu propio setter y getter si quieres usar tu
propia lógica:
// @Data // NUNCA USES @Data
@Getter @Setter
public class Incidencia {
int numero;
String descripcion;
public String getDescripcion() { // Tu propio getter sobrescribe el generado por Lombok
if (descripcion == null) return "Todavía sin descripción";
return descripcion;
}
}
En este caso Lombok genera para ti
getNumero(), setNumero()
y
setDescripcion() mientras que
getDescripcion() es el que
hemos escrito nosotros. Fíjate como nunca deberías usar la anotación
@Data
de Lombok, dado que produce bucles recursivos infinitos si tienes
referencias recíprocas, algo bastante común en las aplicaciones de
negocio.