Je viens de m'apercevoir que le JDK 8 contient la classe Optional
qui sert à contenir une valeur potentiellement absente.
Habituellement on retourne null
pour signifier l'absence de valeur. Néanmoins cela peut provoquer des NPE plus tard dans le code.
Je n'étais pas hyper convaincu de l'intérêt de Optional
, mais je pense que c'est quand même mieux de l'utiliser pour plusieurs raisons :
- le fait que la méthode peut ne pas fournir de valeur est indiqué dans sa signature
- l'interface est claire :
isPresent
etget
- le get lève
NoSuchElementException
Le type de retour indique la possibilité de ne pas avoir de valeur alors qu'avec une méthode qui retourne null
il faut consulter la javadoc. Ainsi si on prend l'habitude de tester isPresent
avant de l'utiliser, pas de problème. Mais même si on appelle get
sur un Optional vide on à l'exception. En fait il est préférable d'utiliser la méthode ifPresent
comme indiqué sur la page Oracle.
Évidemment cela suppose de ne pas transmettre un Optional
en paramètre car là il me semble qu'on retombe dans les inconvénients de transmettre une valeur null
. Je pense qu'il faut appeler isPresent
et get
immédiatement après le retour de méthode, ainsi si il y a un problème il est localisé au plus près de la source.