Gli sviluppatori di Oracle hanno recentemente rilasciato la versione numero 17 del JDK (Java Development Kit), si tratta delle prima versione LTS (Long Term Support) del progetto realizzata nel corso dell'ultimo triennio, la precedente fu JDK 11. Come è noto infatti Java viene aggiornato ogni 6 mesi con una nuova release messa a disposizione a marzo e settembre che non gode più del supporto da parte della casa madre nel momento in cui viene rilasciata la successiva, contestualmente vengono prodotte delle LTS con un ciclo di vita pari a 8 anni.
Versioni LTS e supporto esteso
Attualmente, oltre al JDK 17 sono disponibili altre tre release LTS con supporto esteso: la 7, che verrà supportata fino a luglio 2022, la 8, fino a dicembre 2030, e la 11 per la quale la deadline è stata fissata per settembre 2029. Queste scadenze potrebbero generare confusione ma sono state stabilite in base a criteri differenti.
JDK 8, ad esempio, venne rilasciata nel marzo del 2014 e godrà del cosiddetto Premier support fino a marzo 2022, successivamente e per gli 8 anni seguenti si dovrà parlare di supporto esteso. Nel caso di JDK 17, invece, il Premier support durerà fino a settembre 2026 e quello esteso per i 3 anni seguenti. Per lo stesso motivo Java 21, LTS che sarà disponibile a settembre 2023, verrà supportato fino a settembre 2031.
Nuove feature in Java 17
A dispetto del fatto di essere una LTS, JDK 17 non porta con sé novità particolarmente rilevanti a parte il supporto alle sealed classes che comunque era presente in Java 15 sotto forma di preview. Queste ultime hanno in pratica la caratteristica di limitare i tipi ereditabili da esse.
Ad imporre tale restrizione è la clausola permits
che permette di introdurre le sottoclassi autorizzate:
public abstract sealed class Mammiferi
permits Primati, Felini, Cetacei { ... }
Da segnalare anche un nuovo generazione di numeri casuali e il miglioramento del supporto nativo per i sistemi macOS. E' inoltre interessante l'introduzione di una foreign function e memory API che consente alle applicazioni Java di interoperare con codice e dati al di fuori del runtime Java.
Funzionalità rimosse
In Java 17 non troviamo più il compilatore Java AOT (Ahead-Of-Time) che non è mai uscito dalla fase sperimentale, tale novità è stata motivata dagli sviluppatori facendo riferimento al fatto che questa feature è stata utilizzata raramente fin dalla sua introduzione. A tal proposito Oracle ricorda che AOT non era stato incluso in JDK 16 senza alcuna reazione particolare da parte della community, stando così le cose il tempo e le risorse necessarie per la sua implementazione non sarebbero più giustificabili.
Discorso simile per quanto riguarda l'Applet API che però verrà rimossa soltanto con il rilascio del JDK 18 (atteso per marzo del prossimo anno e oggi in fase di Early-Access) e per il momento è stata deprecata. Una scelta prevedibile considerando che il plugin per le applet dei browser Web era stato eliminato a partire da Java 11.