Early-Access Builds.
¿Que es un Record?
Es una nueva declaración de tipo, similar a una clase con las siguientes características (descritas en el JEP 359):
- tiene un nombre y un state description que define sus componentes.
- cada componente del estado tiene un método de acceso público con el mismo nombre del componente.
- tiene un constructor público con la misma firma que el state description en el cual se inicializa cada campo desde el argumento.
- implementa equals y hashCode, en donde 2 records serán iguales si son del mismo tipo y contienen el mismo estado.
- implementa toString con la representación de todos sus componentes.
- cada componente del state description es private final.
- no pueden extender otras clases.
- no pueden tener otros campos de instancia, solo los del state description.
- si se definen otros campos tienen que ser static.
- un record es final y no puede ser abstracto.
- puede implementar interfaces.
- su body es opcional.
- como es preview, puede cambiar en el futuro.
Creando un Record
Un ejemplo de record es el siguiente:
record Persona(int edad, String nombre) {}
y eso es todo 👽 tenemos nuestro record Persona que en el state description define los componentes edad y nombre. Para instanciarlo realizamos lo siguiente:final var p1 = new Persona(12, "Persona 1");
ahora p1 tiene edad = 12 y nombre = "Persona 1", y los métodos para acceder a ellos son:p1.edad();
p1.nombre();
Y al mostrar el contenido con System.out obtenemos lo siguiente:
Persona[edad=12, nombre=Persona 1]
Compilación
- descargar la JDK 14 ea y asociarlo al JAVA_HOME:
export JAVA_HOME=/path/jdk-14
- agregar la opción para que maven tenga habilitada la opción preview al ejecutar la clase main:
export MAVEN_OPTS=--enable-preview
- configurar el plugin de maven con --enable-preview en la compilación:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <release>14</release> <compilerArgs>--enable-preview</compilerArgs> </configuration> </plugin>
mvn compile exec:java