No suelo mirar en cada versión de Java qué novedades hay. Más bien me suelo tropezar con ellas. Y la última con la que me he tropezado son los record, de java 14 en adelante
Qué es un record en Java. Un ejemplo de record
public record Registro(int a, String b) {
}
Esto crea una clase Java, de nombre Registro, con dos campos int a y String b. Pero esa clase tiene una serie de particularidades
Tiene un constructor con dos parámetros, a y b
Los campos a y b son inmutables, es decir, una vez construida la clase, no podemos cambiar su valor
Tiene getter, aunque no cumplen la nomenclatura estándar. Son registro.a() y registro.b(). Como son inmutables, no hay setter
Tiene una implementación por defecto de hashcode(), equals() y toString() que contemplan todos los campos (a y b)
Para qué sirve un record en Java
Pues tiene una utilidad muy relativa. Es una forma sencilla de construir una estructura de datos que no se pueden modificar
Así que sirve principalmente para pasar datos de un lado a otro, pero que no necesiten ser modificados, ya que es inmutable. Y para esos casos, es una forma sencilla de definir esa estructura de datos.
Constructores y métodos en un record en Java
Podemos dar lógica al constructor por defecto de record, que lleva dos parámetros o definir otros constructores
public record Registro(int a, String b) {
public Registro(int a, String b){
if (null==b){
throw new IllegalArgumentException();
}
this.a=a;
this.b=b;
}
public Registro (int a) {
this(a,"");
}
public Registro(){
this(0,"");
}
}
Hemos añadido lógica al constructor con dos parámetros para que no admite un null como parámetro b. Hemos añadido un constructor con un solo parámetro y sin parámetros, que llaman al constructor con dos parámetros dando valores por defecto.
Podemos también añadir otros métodos. Lo único es que en esos métodos no podemos modificar los valores de a y b, ya que internamente están definidos con final.