English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基礎教程

Controllo dei flussi di Java

Array di Java

Java orientato agli oggetti (I)

Java orientato agli oggetti (II)

Java orientato agli oggetti (III)

Java 异常处理

Lista (List) di Java

Queue (coda) di Java

Map di Java

Set di Java

Input/Output (I/O) di Java

Reader/Writer di Java

Altri argomenti di Java

Classe Optional di Java 8

Nuove funzionalità Java 8

La classe Optional è un oggetto contenitore che può essere nullo. Se il valore esiste, il metodo isPresent() restituirà true e il metodo get() restituirà l'oggetto.

Optional è un contenitore: può conservare un valore di tipo T o semplicemente conservare null. Optional fornisce molti metodi utili, in modo da non dover effettuare controlli espliciti sui valori nulli.

L'introduzione della classe Optional ha risolto ottimamente l'eccezione di puntatore nullo.

Dichiarazione di classe

Ecco un java.util.Optional<T> Dichiarazione della classe:

public final class Optional<T>
extends Object

Metodo di classe

Numero di ordinamentoMetodo & Descrizione
1static <T> Optional<T> empty()

Restituisce un esempio di Optional vuoto.

2boolean equals(Object obj)

Determina se l'oggetto altri è uguale a Optional.

3Optional<T> filter(Predicate<? super <T> predicate)

Se il valore esiste e corrisponde al predicate fornito, restituisce un'Optional che descrive questo valore, altrimenti restituisce un'Optional vuoto.

4<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)

Se esiste un valore, restituisce un'Optional basato sul valore della mappatura contenuta nell'Optional, altrimenti restituisce un'Optional vuoto.

5T get()

Se questo valore è contenuto nell'Optional, restituisce il valore, altrimenti solleva un'eccezione: NoSuchElementException

6int hashCode()

Restituisce l'hash code del valore esistente, se il valore non esiste restituisce 0.

7void ifPresent(Consumer<? super T> consumer)

Se esiste un valore, chiama il consumer con quel valore, altrimenti non fa nulla.

8boolean isPresent()

Se il valore esiste, il metodo restituisce true, altrimenti restituisce false.

9<U>Optional<U> map(Function<? super T,? extends U> mapper)

Se esiste un valore, esegue una chiamata alla funzione di mappatura per ottenere il valore di ritorno. Se il valore di ritorno non è null, crea un'Optional contenente il valore di ritorno della mappatura come valore di ritorno del metodo map, altrimenti restituisce un'Optional vuoto.

10static <T> Optional<T> of(T value)

Restituisce un'Optional con un valore non nullo specificato.

11static <T> Optional<T> ofNullable(T value)

Se non è vuoto, restituisce l'Optional che descrive il valore specificato, altrimenti restituisce un Optional vuoto.

12T orElse(T other)

Se esiste il valore, restituisce il valore, altrimenti restituisce other.

13T orElseGet(Supplier<? extends T> other)

Se esiste il valore, restituisce il valore, altrimenti innanza other e restituisce il risultato della chiamata a other.

14<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)

Se esiste il valore, restituisce il valore contenuto, altrimenti lancia un'eccezione derivata da Supplier

15String toString()

Restituisce un'Optional di stringa non vuota, utilizzato per il debug

Attenzione: Questi metodi vengono da java.lang.Object ereditato dalla classe.

Esempio Optional

Possiamo utilizzare l'esempio seguente per comprendere meglio l'uso della classe Optional:

import java.util.Optional;
 
public class Java8Tester {
   public static void main(String args[]){
   
      Java8Tester java8Tester = new Java8Tester();
      Integer value1 = null;
      Integer value2 = new Integer(10);
        
      // Optional.ofNullable - Permette di passare un parametro null
      Optional<Integer> a = Optional.ofNullable(value1);
        
      // Optional.of - Se il parametro passato è null, lancia un'eccezione NullPointerException
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a,b));
   }
    
   public Integer sum(Optional<Integer> a, Optional<Integer> b){
    
      //Optional.isPresent - Giudica se il valore esiste
        
      System.out.println("Il valore del primo parametro esiste: " + a.isPresent());
      System.out.println("Il valore del secondo parametro esiste: " + b.isPresent());
        
      //Optional.orElse - Se il valore esiste, restituisce esso, altrimenti restituisce il valore predefinito
      Integer value1 = a.orElse(new Integer(0));
        
      //Optional.get - Ottieni il valore, il valore deve esistere
      Integer value2 = b.get();
      return value1 + value2;
   }
}

Esegui lo script sopra, il risultato di output è:

$ javac Java8Tester.java 
$ java Java8Tester
Il valore del primo parametro esiste: false
Il valore del secondo parametro esiste: true
10

Nuove funzionalità Java 8