Java 17, una versión de soporte a largo plazo (LTS), trae varias nuevas características y mejoras a la plataforma Java. Este tutorial cubrirá algunas de las características clave introducidas en Java 17, con ejemplos para ilustrar su uso.
Tabla de Contenidos
- Clases Selladas
- Coincidencia de Patrones para Switch (Vista Previa)
- Generadores de Números Pseudoaleatorios Mejorados
- Nuevo Pipeline de Renderizado para macOS
- Filtros de Deserialización Específicos para Contextos
- Despreciación de la API Applet para Eliminación
- Otras Mejoras
1. Clases Selladas
Las clases y interfaces selladas restringen qué otras clases o interfaces pueden extenderlas o implementarlas. Esto ofrece más control sobre la jerarquía de herencia.
Ejemplo
// Define una clase sellada
public sealed class Shape permits Circle, Rectangle { }
// Define subclases permitidas
public final class Circle extends Shape {
double radius;
}
public final class Rectangle extends Shape {
double length, width;
}
2. Coincidencia de Patrones para Switch (Vista Previa)
La coincidencia de patrones para las expresiones e instrucciones switch permite un código más conciso y legible.
Ejemplo
public class PatternMatchingSwitch {
public static void main(String[] args) {
Object obj = "Hello, Java 17";
// Usa la coincidencia de patrones en una instrucción switch
switch (obj) {
case String s -> System.out.println("Es una cadena: " + s);
case Integer i -> System.out.println("Es un entero: " + i);
default -> System.out.println("Tipo desconocido");
}
}
}
3. Generadores de Números Pseudoaleatorios Mejorados
Java 17 introduce nuevas interfaces e implementaciones para los generadores de números pseudoaleatorios (PRNG).
Ejemplo
import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;
public class RandomExample {
public static void main(String[] args) {
RandomGenerator rng = RandomGeneratorFactory.of("Xoshiro256PlusPlus").create();
// Genera números aleatorios
System.out.println("Entero aleatorio: " + rng.nextInt());
System.out.println("Doble aleatorio: " + rng.nextDouble());
}
}
4. Nuevo Pipeline de Renderizado para macOS
Java 17 introduce un nuevo pipeline de renderizado para macOS basado en la API Apple Metal, mejorando el rendimiento y la estabilidad.
5. Filtros de Deserialización Específicos para Contextos
Esta funcionalidad permite definir filtros de deserialización para contextos específicos, mejorando la seguridad al deserializar objetos.
Ejemplo
import java.io.*;
import java.util.*;
public class DeserializationFilterExample {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// Establecer un filtro
ObjectInputFilter filter = ObjectInputFilter.Config.createFilter("com.example.*;!*");
// Aplicar el filtro durante la deserialización
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.data"))) {
ois.setObjectInputFilter(filter);
Object obj = ois.readObject();
System.out.println("Objeto deserializado: " + obj);
}
}
}
6. Despreciación de la API Applet para Eliminación
Java 17 desprecia la API Applet, preparándola para una futura eliminación debido al declive en el soporte de applets Java por parte de los navegadores.
7. Otras Mejoras
Java 17 también incluye varias otras mejoras, tales como:
- Encapsulación estricta de los internos del JDK por defecto.
- Nuevos métodos en clases existentes (por ejemplo, java.nio.file.Files.mismatch).
- Despreciación del paquete java.security.acl para eliminación.
Ejemplo del Método Files.mismatch
import java.nio.file.*;
public class FilesMismatchExample {
public static void main(String[] args) throws IOException {
Path file1 = Path.of("file1.txt");
Path file2 = Path.of("file2.txt");
// Comparar archivos y obtener la posición de la primera discrepancia
long mismatch = Files.mismatch(file1, file2);
if (mismatch == -1) {
System.out.println("Los archivos son idénticos");
} else {
System.out.println("Los archivos no coinciden en la posición de byte: " + mismatch);
}
}
}
Conclusión
Java 17 trae varias mejoras y características significativas que mejoran la expresividad, el rendimiento y la seguridad del lenguaje. Este tutorial ha cubierto algunas de las nuevas características más notables con ejemplos para ayudarte a comenzar. Para una lista completa de todos los cambios y mejoras, consulta las notas de la versión oficial de Java 17.