10
votes

Itérateur NULL COLLECTION

Il est assez courant que je dois vérifier NULL avant d'être itérale lorsqu'il n'est pas sûr que la référence de la collection soit nulle ou non. Échantillon:

for(Object o : nullableIterable(collection))
...


4 commentaires

Oui, je fais ça aussi. Ma méthode est appelée nullsafe () ...


@LukaSeder Quelle instance démontable par défaut ne renvoie-t-elle que NullSafe ()?


J'ai surchargé nullsafe (liste) , nullsafe (défini) , etc. dans une classe d'utilitaire ... Mais votre idée fonctionne aussi, car vous n'exposez que le Type type. Concrets itérant implémentations n'a pas d'importance au site d'appel


Et si quelqu'un choisit de faire du code défensive en ignorant les NULLS, voici une bonne voie Stackoverflow.com/a/2250056/1506477


3 Réponses :


6
votes

ça a l'air bien. Je fais personnellement ça aussi. Vous obtiendrez toujours des développeurs qui n'étaient pas d'accord avec cela, car il s'agit d'une programmation défensive. Imaginez que vous avez un flux de travail ou une classe qui n'est pas censé retourner null . Cela signifie que l'obtention d'un null est un bogue que votre code se masquera car il allumera le null sur une collection vide et que le bogue ne survisera jamais.

Si vous êtes par exemple en train d'écrire des API qui ne prennent pas en charge NULL collections, vous devez éviter cela. Si le code client vous donne une collection null lorsque vous ne le prenez pas en charge, vous devez lancer un illegalargumentException pour que le code du client sache qu'il y a quelque chose qui ne va pas avec la collection fournie. Quelque chose comme: xxx


5 commentaires

D'accord. Je dois donc dire au code du client comment utiliser la méthode et remarquer le piège. Je peux écrire quelques Javadoc pour la méthode.


Ou jeter un illegalargumentException et renvoyez afin que le code client sache que vous ne prenez pas en charge null collections


Certains peuvent discuter comme ça, oui. Mais Certains API sont conçus pour "Support" null et des listes vides. Prenez fichier.list () par exemple. Il peut retourner null à quelques occasions, ce qui ne sont pas nécessairement des erreurs. N.B: Aussi pour Quelques API , il peut être pratique d'accepter null comme substitut des collections vides, si la sémantique serait la même


@Lukaseder Je suis totalement d'accord avec vous. Tout dépend de l'API que vous exposez.


Pourquoi prétendez-vous que c'est un bug? J'ai une telle conception et je pense que la collection n'est pas initialisée pour la performance. Pourquoi est-ce un bug?



0
votes

Cela me semble bon pour moi si vous limitez l'utilisation de cette fonction à la couche qui interagit avec le code "externe" et assurez-vous que vous ne commencerez jamais l'utiliser pour la défense de vous-même ou de vos collègues. Considérez des paramètres d'annotation et des champs de votre code avec @NULLLABLE Annotation - en supposant que ce qui ne soit pas annoté ne peut pas être null, vous êtes particulièrement utile en tenant compte que les IDES et les outils d'analyse statique sont conscients de cette annotation.


0 commentaires

0
votes

Dans la plupart des cas, ce serait ok. de
À l'esprit, vous pouvez rencontrer des tiers qui renvoient NULL en cas d'erreur et qu'une liste vide est un résultat valide. de
Je penserais donc à altérer un peu votre code et à faire quelque chose comme ceci: xxx


0 commentaires