Pourquoi ImmutableList.of () et ses amis interdisent-ils les éléments nuls?

Résumé dit à peu près tout. Voici l’extrait de code pertinent dans ImmutableList.createFromIterable() :

  if (element == null) { throw new NullPointerException("at index " + index); } 

Je l’ai rencontré plusieurs fois et je ne vois pas pourquoi une fonction de bibliothèque polyvalente devrait imposer cette limitation.

Edit 1: par “généraliste”, je serais heureux avec 95% des cas. Mais je ne pense pas avoir encore écrit 100 appels à ImmutableList.of() , et cela a été mordu plus d’une fois. Peut-être que je suis une aberration, cependant. 🙂

Edit 2: Je pense que ma grande plainte est que cela crée un “hiccup” lors de l’interaction avec les collections java.util standard. Comme vous l’avez souligné dans votre exposé, les problèmes liés aux null dans les collections peuvent apparaître loin de l’endroit où ces valeurs nulles ont été insérées. Mais si j’ai une longue chaîne de code qui met les valeurs NULL dans une collection standard à une extrémité et les gère correctement à l’autre, alors je ne peux pas substituer une classe de collecte Google à tout moment, car cela va immédiatement lancer une NullPointerException .

Je l’ai expliqué au sharepoint 25 minutes de cette vidéo: http://www.youtube.com/watch?v=ZeO_J2OcHYM

Désolé pour la réponse paresseuse, mais ce n’est après tout qu’une question “pourquoi” (sans doute pas appropriée pour StackOverflow?).

EDIT: Voici un autre point que je ne suis pas sûr d’avoir précisé dans la vidéo: le total (sur tout le code Java du monde), la quantité de code supplémentaire à écrire pour que les cas non valides utilisent les anciennes Collections.unmodifiableList(Arrays.asList(...)) standbys Collections.unmodifiableList(Arrays.asList(...)) etc. est submergé par la quantité totale (sur tout le code Java du monde) de checkArgument(!foos.contains(null)) appels supplémentaires que tout le monde devrait append si nos collections n’a pas pris soin de cela pour vous. La plupart, par FAR, des utilisations d’une collection ne prévoient pas la présence de null, et devraient vraiment échouer le cas échéant.

En général, dans Google Collections, les développeurs sont du groupe qui ne pense pas que les valeurs nulles devraient être un paramètre d’usage général attendu.

L’une des raisons est que cela permet aux fonctions qui fonctionnent sur la liste de ne pas avoir à vérifier chaque élément pour Null, ce qui améliore considérablement les performances.