Algunas de las características clave de Java 11 son:
Var Handles: Introdujo una API para manipular variables en un estilo más flexible y eficiente.
Nuevos métodos en la clase String: Se agregaron varios métodos útiles a la clase String, como isBlank(), lines(), strip(), stripLeading(), stripTrailing(), repeat(), entre otros.
Colecciones actualizadas: Se añadieron nuevos métodos en las clases List, Set y Map para facilitar la creación y manipulación de colecciones inmutables.
Epsilon Garbage Collector: Introdujo un recolector de basura experimental que es adecuado para escenarios donde no es necesario recuperar memoria.
Mejoras en el rendimiento del compilador: Se realizaron mejoras en el compilador JIT (Just-In-Time) para optimizar el rendimiento de las aplicaciones.
HTTP Client estándar: Se agregó una nueva API para admitir solicitudes HTTP y clientes HTTP nativos sin la necesidad de bibliotecas de terceros.
Launch Single-File Source-Code Programs: Se agregó la capacidad de ejecutar programas de Java de un solo archivo fuente sin necesidad de compilarlos previamente.
Estas son solo algunas de las características y mejoras introducidas en Java 11. Ten en cuenta que Java ha seguido evolucionando después de esa versión, por lo que puede haber características adicionales en versiones más recientes. Te recomendaría consultar la documentación oficial de Java para obtener información más actualizada.
El concepto de Java Record Class es uno de los conceptos que poco a poco todos tendremos que conocer ya que nos permite generar una clase «Record» o registro. Estas clases son muy habituales cuando trabajamos con conceptos como los DTO ya que nos ayudan a generar código de una forma muy rápida y sin esfuerzo a la hora de gestionar DTOS. Vamos a implementar una clase típica de DTO como es la PersonaDTO.
package com.arquitecturajava.ejemplo1;
import java.util.Objects;
publicclass PersonaDTO {
privateString nombre;
privateString apellidos;
privateint edad;
publicStringgetNombre(){
return nombre;
}
publicvoidsetNombre(String nombre){
this.nombre = nombre;
}
publicStringgetApellidos(){
return apellidos;
}
publicvoidsetApellidos(String apellidos){
this.apellidos = apellidos;
}
publicintgetEdad(){
return edad;
}
publicvoidsetEdad(int edad){
this.edad = edad;
}
publicPersonaDTO(String nombre, String apellidos, int edad){
Hemos generado los métodos set/get el constructor los métodos equals y hashcode donde hemos decidido que la igualdad al ser un DTO se basa en la combinación de todas las propiedades del objeto. Ademas hemos generado también un método toString() que es el encargado de imprimir por la consola los valores que el objeto almacena de una forma sencilla. Si nos creamos un programa main como el siguiente:
package com.arquitecturajava.ejemplo1;
import com.arquitecturajava.ejemplo2.PersonaDTO;
public class Principal {
public static voidmain(String[] args){
PersonaDTO p= newPersonaDTO("pepe","perez",20);
PersonaDTO p2= newPersonaDTO("pepe","perez",20);
System.out.println(p.edad());
System.out.println(p.nombre());
System.out.println(p.apellidos());
System.out.println(p.equals(p2));
System.out.println(p);
}
}
Podremos usar cada uno de los métodos fundamentales y ver su resultado por la consola.
La realidad es que el código del DTO es muy grande para lo poco que tiene que hacer y todas las casuísticas a nivel de DTO son idénticas ya que todos tienen sus propiedades se comparan por igualdad comprobando todas sus propiedades .Por último también suelen disponer de un método toString() sobrecargado que nos permita ver su contenido en la consola de forma muy directa.
Java Record y JDK 14
A partir de la versión 14 del JDK y en modo preview disponemos de los Java Records un concepto que nos permite simplificar de forma fuerte la construcción de estos DTOs.
Veamos su código:
public record PersonaDTO(String nombre,String apellidos,int edad){}
Este código aunque nos parezca ultracompacto funciona de la misma forma que el código anterior que son unas 50 lineas. Poco a poco estos nuevos conceptos se empezarán a usar en los desarrollos y hay que irlos conociendo . Si ejecutamos un ejemplo de Java Record nos encontraremos que tiene algunas cosas curiosas.
package com.arquitecturajava.ejemplo2;
publicclass Principal {
publicstaticvoidmain(String[] args){
PersonaDTO p= newPersonaDTO("pepe","perez",20);
PersonaDTO p2= newPersonaDTO("pepe","perez",20);
System.out.println(p.edad());
System.out.println(p.nombre());
System.out.println(p.apellidos());
System.out.println(p.equals(p2));
System.out.println(p);
}
}
No existen métodos set y get sino que son directamente propiedades nombre() , apellidos(), edad(). Esta simplificación puede ser natural para algunos o excesiva para otros ya que no genera homogeneidad. De todas formas es importante ir conociendo estos nuevos conceptos por si nos aparecen en el código. Recordemos que siempre tendremos también a nuestra disposición el proyecto lombok