Usare la classe Optional in Java
Stiamo parlando di Java 8, e non delle versioni predenti (ma penso varrà anche per l'imminente Java 9).
La classe Optional è un container di oggetti sia nulli che non-nulli.
Questo perchè ci sono vari metodi che astraggono il classico controllo sul valore nullo; in caso di valore nullo, eseguono comunque l'operazione richiesta.
Facciamo un esempio banale, andando a sommare due interi.
Per dare un valore null, però, dovremmo usare Integer e non int:
import java.util.Optional;
public class TestOptional {
public static void main(String[] args) {
Integer int1 = null;
Integer int2 = 10;
Optional opt1 = Optional.ofNullable(int1);
Optional opt2 = Optional.ofNullable(int2);
System.out.println(sum(opt1, opt2));
}
public static Integer sum(Optional int1, Optional int2) {
System.out.println("Controllo primo parametro: " + int1.isPresent());
System.out.println("Controllo secondo parametro: " + int2.isPresent());
Integer value1 = int1.orElse(0);
Integer value2 = int2.get();
return value1 + value2;
}
}
Qui vediamo come nel metodo sum usiamo due metodi differenti:
- orElse -> ritorna il valore se presente, o il valore passato come parametro in caso contrario
- get -> ritorna il valore, che però deve essere presente
In questo esempio il risultato sarà 10, come se fosse 10 + 0.
In un esempio "normale" avremmo avuto delle eccezioni da qualche parte.
Ovviamente state attenti al suo uso: un uso sbagliato e senza controlli nei punti critici, potrebbe portare a comportamenti non desiderati!
A parte questo, fate dei testi perchè è molto interessante.
Enjoy!
java optional get orelse
Commentami!