Secondo alcuni sondaggi come quello di JetBrains, la versione 8 di Java è al momento quella più utilizzata in assoluto dagli sviluppatori di tutto il mondo, nonostante si tratti di una release del 2014.
Quello che state leggendo è un articolo che fa parte di una serie di articoli intitolata "Superare Java 8”, ispirata ai contenuti del mio ultimo libro "Il nuovo Java". Questi articoli accompagneranno passo dopo passo il lettore all'esplorazione delle più importanti caratteristiche introdotte a partire dalla versione 9. L'obiettivo è quello di far acquisire la consapevolezza di quanto è importante aggiornare le proprie conoscenze relative a Java, spiegando gli enormi vantaggi che offrono le ultime versioni del linguaggio.
Oracle, accelerando il processo di sviluppo del linguaggio attraverso il rilascio
semestrale delle nuove versioni, sta apportando diversi miglioramenti alla
programmazione Java. Dalla versione 12, con le espressioni switch
ed i text
block è stata introdotta un nuovo tipo di approccio per l'introduzione delle nuove
feature, utilizzando le cosiddette feature preview (in italiano caratteristiche in anteprima).
In pratica, una nuova feature è introdotta allo scopo di essere utilizzabile in
anteprima a scopo sperimentale. In questo modo gli sviluppatori possono testarla,
restituire feedback ad Oracle, che a sua volta potrà così migliorarla nelle prossime
versioni.
Abilitazione delle feature preview
Per poter utilizzare feature preview, bisogna specificare delle opzioni da riga di
comando sia in fase di compilazione che in fase di esecuzione.
In particolare, per compilare occorre specificare l'opzione
--enable-preview
per abilitare le funzionalità di preview, e l'opzione
-source
per specificare la versione di Java per cui vogliamo abilitarle.
Per esempio:
javac --enable-preview -source 15 RecordDemo.java
Al posto dell'opzione -source
è possibile specificare in maniera
equivalente l'opzione -release
:
javac --enable-preview -release 15 RecordDemo.java
Invece, per eseguire un'applicazione che fa uso di una feature preview, bisognerà solo abilitare le funzionalità di preview:
java --enable-preview RecordDemo
Anche i tool javadoc e jshell
supportano l'opzione --enable-preview
.
Per quanto riguarda i vari tool di sviluppo che solitamente utilizziamo per programmare (Eclipse, Netbeans, IntelliJ, Maven etc.), essendo soggetti a continui aggiornamenti e a bug fixing, saremo costretti a far riferimento alla relativa documentazione. Solitamente, si tratta di modificare le impostazioni del progetto, specificando le opzioni di compilazione e di runtime che abbiamo descritto.
Esempio
Sino alla versione 13 di Java, l'espressione switch
era quindi una feature preview (dalla 14 in poi è stata
ufficializzata come caratteristica standard). Infatti, se volessimo compilare con un JDK
versione 13 la seguente classe che utilizza una espressione switch
:
import java.time.Month; public class SeasonSwitchExpressionEnumTest { public static void main(String args[]) { Month month = Month.APRIL; String season = switch(month) { case DECEMBER, JANUARY, FEBRUARY: yield "winter"; case MARCH, APRIL, MAY: yield "spring"; case JUNE, JULY, AUGUST: yield "summer"; case SEPTEMBER, OCTOBER, NOVEMBER: yield "autumn"; }; System.out.println("The season is " + season); } }
otterremo i seguenti errori in compilazione:
javac SeasonSwitchExpressionEnumTest.java SeasonSwitchExpressionEnumTest.java:9: error: switch expressions are a preview feature and are disabled by default. String season = switch(month) { ^ (use --enable-preview to enable switch expressions) SeasonSwitchExpressionEnumTest.java:10: error: multiple case labels are a preview feature and are disabled by default. case DECEMBER, JANUARY, FEBRUARY -> "winter"; ^ (use --enable-preview to enable multiple case labels) SeasonSwitchExpressionEnumTest.java:10: error: switch rules are a preview feature and are disabled by default. case DECEMBER, JANUARY, FEBRUARY -> "winter"; ^ (use --enable-preview to enable switch rules) 3 errors
Per poter compilare correttamente questa classe contente l'espressione
switch
, bisogna specificare le opzioni dalla riga di comando che abbiamo
introdotto nella sezione precedente. In particolare --enable-preview
per
abilitare le funzionalità di preview, e -source
13 per specificare la
versione di Java per cui vogliamo abilitarle:
javac --enable-preview -source 13 SeasonSwitchExpressionEnumTest.java
Al posto dell'opzione -source
è possibile specificare in maniera
equivalente l'opzione -release
:
javac --enable-preview -release 13 SeasonSwitchExpressionEnumTest.java
Invece per lanciare l'esempio bisognerà solo abilitare le funzionalità di preview:
java --enable-preview SeasonSwitchExpressionEnumTest
Perché è importante
Nella versione 12 di Java, quando le espressioni switch
furono introdotte
come feature preview, al posto della parola yield
, si utilizzava la parola
break
. Solo nella versione 13 quest'ultima fu sostituita dalla parola
yield
. Infatti, la maggior parte dei feedback per questa feature preview
giudicarono l'utilizzo del break
fuorviante, in quanto già usato in altri
contesti. Questo dimostra l'importanza delle feature preview. In pratica gli
sviluppatori Java hanno potuto partecipare ancora più attivamente al processo di
sviluppo di questa nuova caratteristica. Con il processo delle feature preview, Java si
candida ancora di più ad essere un linguaggio sempre più apprezzato dagli sviluppatori,
giacché essi potranno esprimere le proprie opionioni prima che la caratteristica sia
ufficializzata.
Inoltre, oltre alle espressioni switch
di cui abbiamo accennato
nell'esempio precedente, altre fondamentali caratteristiche sono state introdotte con
questo percorso basato sull'anteprima. Tra queste ricordiamo per esempio il pattern
matching per
instanceof
, i text block, i tipi sealed
ed anche i tipi record
.
Come mandare feedback ad Oracle
È possibile mandare ad Oracle feedback sulle feature preview scrivendo nelle discussioni
della mailing list di OpenJDK. Purtroppo si tratta di un processo non molto intuitivo.
In particolare, per trovare la discussione relativa ad una particolare feature preview,
bisogna andare alla pagina che riguarda le caratteristiche della versione del JDK che
state utilizzando, cliccare dall'elenco sul link della feature preview su cui restituire
il feedback, e interpretare come email una stringa che trovate sotto il titolo della
pagina, che segue la parola discussion. A questa mail poi potrete mandare il vostro
feedback.
Per esempio, se state utilizzando la versione 15 e volete mandare un feedback sui tipi
sealed
, bisogna andare alla pagina
https://openjdk.java.net/projects/jdk/15 (per cambiare versione basta cambiare
il numero “15” con il numero di versione desiderato). Trovare nell'elenco la feature
preview Sealed Classes (Preview) e cliccare sul
relativo link. Alla pagina che si aprirà, sotto il titolo trovate un elenco di
informazioni tra cui un voce discussion, che in
questo caso è valorizzata con “amber dash dev at openjdk dot java dot net” (vedi Figura
1)
Figura 1 – Interpretazione dell'indirizzo email a cui mandare il feedback.
Purtroppo non si tratta di un link, ma è una stringa da interpretare come amber-dev@openjdk.java.net. In
pratica bisogna mandare una email contenente il feedback a questo indirizzo. In
particolare, per iscriversi alla mailing list del progetto, potete andare a questo
indirizzo:
http://mail.openjdk.java.net/mailman/listinfo/amber-dev.
Se invece volete segnalare un bug, potete cliccare direttamente sul link del Java Bug Database.
Conclusioni
In questo breve articolo abbiamo visto come abilitare le feature preview, e poter utilizzare in anteprima le caratteristiche che verranno introdotte nelle prossime versioni di Java. Abbiamo anche capito perché sono importanti e come il processo di introduzione delle nuove caratteristiche sia oggi più democratico, dato che chiunque può contribuire alla standardizzazione del linguaggio. Questo aiuterà Java a diventare un linguaggio sempre più interessante.