Modern Java: var, records, sealed classes and pattern matching
The Java 10 to 21 features that write less and better: var inference, records, switch expressions, pattern matching, sealed and text blocks.
El Java que se escribe hoy es más corto que el de hace 10 años. Estas son las mejoras más útiles, disponibles en las versiones con soporte largo (LTS): Java 17 y Java 21.
var: type inference
En variables locales, var deja que el compilador deduzca el tipo por el valor de la derecha.
No es tipado dinámico: la variable sigue teniendo un tipo fijo, solo que no lo escribes.
records: immutable data without boilerplate
Un record es una clase para llevar datos. En una línea generas: constructor, getters
(x(), y()), equals(), hashCode() y
toString().
record Punto(int x, int y) interactivoswitch expressions and pattern matching
El switch moderno devuelve un valor y, con pattern matching, puede ramificar según
el tipo del objeto y extraer sus datos a la vez.
String describir(Object o) {
return switch (o) {
case Integer i -> "entero: " + i;
case String s -> "texto de " + s.length() + " letras";
case Punto(int x, int y) -> "punto (" + x + ", " + y + ")";
case null -> "nada";
default -> "otro tipo";
};
}
sealed: closed hierarchies
sealed declara exactamente qué clases pueden heredar. El compilador lo sabe,
así que un switch sobre esos tipos no necesita default: sabe que están todos.
sealed interface Figura permits Circulo, Rectangulo {}
record Circulo(double radio) implements Figura {}
record Rectangulo(double base, double altura) implements Figura {}
double area(Figura f) {
return switch (f) { // sin default: el compilador sabe que están todas
case Circulo c -> Math.PI * c.radio() * c.radio();
case Rectangulo r -> r.base() * r.altura();
};
}
Check what you've learned
var en Java significa que…record?sealed en un switch de patrones: