Cinco previews, de JDK 23 a JDK 27, y la sexta no llegará. El 9 de noviembre de 2026, el equipo del proyecto Amber anunció que deja de desarrollar Primitive Types in Patterns, instanceof, and switch: el borrador de JEP que la iba a previsualizar por sexta vez se retira y la funcionalidad se elimina de JDK 28, también con --enable-preview. Retirar una preview es poco habitual, y la razón dice mucho de hacia dónde va el lenguaje.
Qué se pierde
La funcionalidad extendía el pattern matching a los tipos primitivos. Permitía escribir case int i when i >= 100 en un switch, usar instanceof con int o double, y descomponer un record con un tipo primitivo distinto al de su componente. El ejemplo de la propia JEP es un JsonNumber(double d): con la preview, instanceof JsonNumber(int a) solo encajaba si el double cabía en un int sin perder información. Sin ella, vuelves al cast manual, que puede truncar sin avisar.
Esa idea de conversión exacta era lo más valioso del diseño: el patrón distingue entre conversiones con pérdida y sin pérdida, y simplemente no encaja cuando habría pérdida.
| Versión | JEP | Estado |
|---|---|---|
| JDK 23 | JEP 455 | Primera preview |
| JDK 24 | JEP 488 | Segunda, sin cambios |
| JDK 25 | JEP 507 | Tercera, sin cambios |
| JDK 26 | JEP 530 | Cuarta, con exactitud y dominancia más estrictas |
| JDK 27 | JEP 532 | Quinta, sin cambios |
| JDK 28 | — | Eliminada |
Por qué se retira
No es que la funcionalidad no funcionara. El motivo es Valhalla: ese proyecto está explorando una nueva visión de los tipos numéricos en Java, incluida la posibilidad de que el usuario defina los suyos. Esos tipos nuevos tendrían que soportar la conversión exacta, y la conversión exacta tendría que contemplarlos a ellos. Con Valhalla todavía en evolución, el equipo considera prematuro cerrar la definición actual. Fijarla ahora habría sido atarse a una semántica que quizá no encaje con los números del futuro.
El proceso lo permite sin dramas: la JEP 12, que regula las previews, ya prevé que una pueda retirarse mediante una incidencia en el JBS, sin necesidad de una JEP nueva.
Qué viene en su lugar
Amber planea sustituirla por otra funcionalidad, Constant Patterns, que hereda parte del trabajo, como el soporte ampliado de primitivos en switch. Permitirá usar algunas constantes como patrones anidados dentro de un record, por ejemplo case Point(0, 0), lo que quitará cláusulas when de muchos switch. El borrador de su JEP se publicará en breve.
A quién afecta
A casi nadie en producción, porque las previews no deberían estar ahí. Pero sí a quien la haya probado en proyectos internos o en librerías que compilan con --enable-preview en cada versión: al pasar a JDK 28, ese código dejará de compilar. Si es tu caso, el arreglo es mecánico: los case int i vuelven a ser default y los patrones primitivos dentro de records vuelven a un cast con tu propia comprobación de rango.
// JDK 27 con --enable-preview
case int i when i >= 100 -> issueGoldCard();
case int i -> standardOffer(i);
// JDK 28: sin patrones primitivos
default -> flights >= 100 ? issueGoldCard() : standardOffer(flights);La lección va más allá de esta funcionalidad: cinco previews no garantizan que algo llegue a ser estándar. Las previews existen justo para poder cambiar de idea, y Java acaba de usar esa puerta con algo que llevaba cinco versiones a la vista.
Fuentes
- Withdrawing the Primitive Patterns Preview Feature — Inside Java, 11 de noviembre de 2026.
- Withdrawing the Primitive Patterns preview feature — Angelos Bimpoudis, lista amber-spec-experts, 9 de noviembre de 2026.
- JEP 532: Primitive Types in Patterns, instanceof, and switch (Fifth Preview) — OpenJDK.