Autres conseils

Non - parce que NaN est une valeur valide, en l'utilisant ne causera aucune exception à jeter. Sans aucun mécanisme de surveillance omniprésentes à utiliser, vous devez tester explicitement aux points où il pourrait être affecté ou retour d'une méthode.

Si vous prêt à sacrifier la performance de l'application, vous pouvez créer une enveloppe pour double (ou un autre objet numérique que vous voulez utiliser) et jeter exception lorsque NaN est réglé.

Techniquement, il serait possible de créer un agent pour le faire par instrumentant le code en question pour injecter assert ou si teste automatiquement. Cela impliquerait un peu d'inspection de bytecode et de transformation (par exemple en utilisant ASM ). À mon avis, il faudrait des circonstances exceptionnelles pour justifier cela. Il faudrait veiller à ne pas instrument toutes les classes qui comptent sur la possibilité de traiter NaN en interne.

Je ne suis pas au courant que quelqu'un a écrit un tel agent. Si vous êtes à la recherche d'une balle d'argent, je ne pense pas qu'il y ait un.

Juste une autre approche - vous pouvez intégrer les dames de code comme PMD dans votre processus de construction et de créer une règle rapports chaque mission de Double.NaN.

Il ne sera pas parfait, car il ne peut pas attraper NaN de vous obtenez de l'extérieur (base de données, connexions) ou que quelqu'un crée par la manipulation de bits, mais au moins vous pouvez assurer que Double.NaN ne peut être affecté à une variable ou être utilisé comme un paramètre de procédé ou à l'intérieur d'une évaluation.

La définition des règles peut être difficile - mais au moins - il est une autre approche. La règle la plus simple pourrait être d'interdire Double.NaN du tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top