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 :

  1. le fait que la méthode peut ne pas fournir de valeur est indiqué dans sa signature
  2. l'interface est claire : isPresent et get
  3. 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.

Voir aussi