Superare Java 8: Caratteristiche in anteprima (Feature Preview)

Superare Java 8: Caratteristiche in anteprima (Feature Preview)

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.
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.

Note dell'autore

Anche ignorando la maggiore sicurezza che offrono le ultime versioni del JDK, esistono tantissimi motivi per aggiornare le proprie conoscenze di Java, o quantomeno le proprie installazioni del runtime di Java. Il mio ultimo libro "Il nuovo Java", a cui si ispira la serie “Superare Java 8”, contiene tutte le informazioni per poter imparare Java da zero, ed utilizza un metodo didattico ben collaudato e perfezionato in 20 anni di esperienza, che rende l'apprendimento semplice e appassionante. Inoltre è strutturato per approfondire gli argomenti ed avere una conoscenza superiore che può fare la differenza per la vostra carriera lavorativa.
Questo articolo è ispirato all'approfondimento extra oline del libro "Il nuovo Java", che potete scaricare insieme a tutti gli altri approfondimenti, le appendici, gli esercizi ed il codice sorgente del libro e delle risorse online, nella sezione download de "Il nuovo Java".

Lascia un commento

Una email sarà mandata a
claudio@claudiodesio.com


Caricamento
Il tuo messaggio è stato mandato. Grazie!