Java 10: inferenza, classi, API e metodi

28 marzo 2018

Java 9 ha introdotto cambiamenti significativi alla struttura e all’architettura del linguaggio. La politica di Oracle sembra consolidarsi verso una direzione che porta al rilascio di aggiornamenti del linguaggio più frequenti rispetto al passato.

Non dobbiamo quindi stupirci dell’uscita della versione 10 a cosi breve distanza nel tempo da quella precedente. In questo articolo vogliamo illustrare le modifiche presenti nella nuova release che riteniamo più interessanti.

Inferenza del tipo di dato dichiarato per una variabile locale

Il diamond operator, introdotto con la versione Java 7, fa parte di quell’insieme di modifiche volte alla riduzione della verbosità del linguaggio. Consideriamo il seguente esempio pre Java 7:

  
     List<String> list=new ArrayList<String>(); 
	

L’utilizzo del diamond operator consente di utilizzare un codice leggermente più compatto:

  
     List<String> list=new ArrayList<>(); 	
	

La novità interessante di Java 10,in questo ambito, è l’introduzione della parola chiave var che consente l’inferenza del tipo di dato dichiarato per una variabile locale:

  
    var list = new ArrayList<>(); 
    var list = new ArrayList<String>();
	

Nel primo caso viene dedotto un ArrayList di oggetti Object mentre nel secondo caso un ArrayList di oggetti String. Possiamo notare come il codice acquisti maggiore compattezza.

L’utilizzo della parola chiave var è sottoposto ad alcune restrizioni: non può essere utilizzato nella dichiarazione di variabili senza inizializzazione o con inizializzazione al valore null:

 
        var identificatore; // Non consentito
        var identificatore1, identificatore2 = 0; // Non consentito
        var identificatore = null; // Non consentito
	

Come ultima nota su questa nuova parola chiave, facciamo notare che il suo utilizzo è possibile per i nomi di variabile, metodo e package ma non per un nome di classe:

 
        public class var {..} // Non consentito
	

La classe Optional

Rimanendo nel contesto di riduzione della verbosità, la classe Optional viene dotata del metodo orElseThrow() che consente di evitare l’utilizzo del metodo orElseThrow(Exception) quando l’eccezione NoSuchElementException è ciò di cui abbiamo bisogno:

 	
        Optional<String> optional = new Optional<String>();
        var value = optional.orElseThrow();
	

invece di:

  
     String value = optional.orElseThrow(NoSuchElementException::new);
	

API e metodi in Java 10

Nell’ambito delle API per la creazione di liste e mappe non modificabili, i tipi List, Set e Map sono stati dotati del metodo copyOf() che consente di ottenere una copia non modificabile di una lista, insieme o mappa partendo da una già esistente:

    var lista = new ArrayList<>;

    lista.add("Str1");
    lista.add("Str2");

    var lista2 = lista.copyOf(lista);

    lista2.add("Str3"); // produrrà un'eccezione
	

Alla sfera di queste modifiche appartiene l’introduzione dei metodi toUnmodifiableList(), toUnmodifiableSet() e toUnmodifiableMap() per la classe Collectors del package Streams:

     var stream = lista.stream().collect(Collectors.toUnmodifiableList());
	

Se vuoi aggiornamenti su Java 10: inferenza, classi, API e metodi inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Java 10: inferenza, classi, API e metodi

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy