English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Ecco un java.util.Optional<T> Dichiarazione della classe:
public final class Optional<T> extends Object
Numero di ordinamento | Metodo & Descrizione |
---|---|
1 | static <T> Optional<T> empty() Restituisce un esempio di Optional vuoto. |
2 | boolean equals(Object obj) Determina se l'oggetto altri è uguale a Optional. |
3 | Optional<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. |
5 | T get() Se questo valore è contenuto nell'Optional, restituisce il valore, altrimenti solleva un'eccezione: NoSuchElementException |
6 | int hashCode() Restituisce l'hash code del valore esistente, se il valore non esiste restituisce 0. |
7 | void ifPresent(Consumer<? super T> consumer) Se esiste un valore, chiama il consumer con quel valore, altrimenti non fa nulla. |
8 | boolean 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. |
10 | static <T> Optional<T> of(T value) Restituisce un'Optional con un valore non nullo specificato. |
11 | static <T> Optional<T> ofNullable(T value) Se non è vuoto, restituisce l'Optional che descrive il valore specificato, altrimenti restituisce un Optional vuoto. |
12 | T orElse(T other) Se esiste il valore, restituisce il valore, altrimenti restituisce other. |
13 | T 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 |
15 | String toString() Restituisce un'Optional di stringa non vuota, utilizzato per il debug |
Attenzione: Questi metodi vengono da java.lang.Object ereditato dalla classe.
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