NullPointerException con Java 8

Tempo lettura: 1 minuti, 47 secondi
Difficoltà: Nessuna
Attenzione:
scritto tempo fa

Chi ha avuto modo di programmare in Java sa che uno degli errori più frequenti nelle applicazioni java è il NullPointerException. Chiunque ha esperienza in programmazione sa quanti crash di sistema grattacapi e vulnerabilità possono essere generati da questo strano oggetto che è null.

Caso di errore tipico

Dalla documentazione ufficiale si apprende che dovrebbe essere considerata una espressione speciale che può essere assegnata ad un qualsiasi tipo di reference. Non può essere istanza di alcun oggetto nè può avere un nome. Vediamo l'esempio di un tipico caso di errore. caratterizza un oggetto opzionale

 // cerca needle in stringColl. Se non viene trovata viene restituito null. String find (Collection<String> stringColl, String needle) { for (String s : c) { if (s.equals(needle)) returns s; } return null; } 

In molti linguaggi di programmazione hanno eliminato il problema non implementando il reference null. In Java non è stato possibile farlo perchè avrebbe comportatola rottura della retrocompatibilità..... Tuttavia in Java 8 si è affrontato il problema in modo serio con l'introduzione del tipo Optional.  E pur vero che anche prima poteva essere utilizzato in scala nella libreria guava, ma ora sono ufficialmente parte del core del linguaggio. Il tipo Optional per definizione non è nient'altro che un contenitore che può incapsulare un oggetto oppure essere vuoto. Si può instanziarlo in vari modi: Otional.of (T oggettoNonNull) of è un metodo factory che restituisce un Optional non vuoto che incapsula l'oggetto oggettoNonNull. Se si inserisce un null viene lanciata la NullPointerException. Otional.empty() restituisce un istanza vuota di Optional. Otional.ofNullable (T oggettoForseNull) restituisce un Optional che descrive un oggettoForseNull se quest'ultimo è non null altrimenti un Optional vuoto. La funzione find() in questo caso potrebbe essere riscritta nel seguente modo:

 Optional <String> find (Collection<String> stringColl, String needle) { for (String s : stringColl) { if (s.equals(needle)) return Optional.of(s); } return Optional.empty(); } 

Come possiamo vedere dall'esempio usando gli Optional possiamo ottere lo stesso risulato e cioè cerchiamo la stringa needle nella collection se la troviamo la incapsuliamo in un Optional altrimenti ne restituiamo uno vuoto.  

 

 

Ricevi le ultime novità

Condividi:

Circa l'autore

Giuseppe Alessandro De Blasio

Salve il mio nome come avrete notato e Giueppe Alessandro De Blasio e questo è il mio blog, tutto nasce dalla passione per la tecnologia e per il web in generale, ed oggi lo utilizzo come mezzo di condivisione. Spero che la vostra permanenza sul mio blog vi sia utile e che decidiate di diventare miei affezionati lettori.

Commenti