2011-01-05 7 views
2

Est-ce que je dois vérifier le passage des valeurs nulles pour les valeurs qui doivent être valides dans les constructeurs? En d'autres termes, devrais-je avoir le lancer de classe quand il obtient une valeur invalide, ou devrais-je le laisser jusqu'à ce qu'il essaye de faire quelque chose avec lui, laissant le temps d'exécution lever l'exception?Quand vérifier les null?

Je suppose que si passer une valeur nulle est une erreur, je devrais la traiter comme telle dans le constructeur?

+0

Vous devriez essayer d'échouer le plus tôt possible – Falmarri

Répondre

8

Voir this StackOverflow post et les remarques sur le principe Fail Early. Si passer une valeur nulle est une erreur, vous devriez certainement la traiter comme telle dans le constructeur.

+3

En plus d'échouer tôt, vous devriez également y penser du point de vue de l'auto-cohérence. Si l'objet se trouve dans un état incohérent une fois construit à partir d'un null, alors, par tous les moyens, ne permettent pas la construction de se produire. C'est le travail de la classe de s'assurer que l'objet reste cohérent à tout moment. Si tous vos objets sont cohérents à tout moment, vous avez parcouru un long chemin pour avoir une base de code stable et prévisible. – rfeak

0

S'il n'y a pas moyen de continuer sans l'erreur quand une valeur nulle est utilisée, alors attrapez-la tôt dans le constructeur. Si vous pouvez faire quelque chose de toute façon, alors attendez.

4

Je le fais. Si un argument non nul fait partie de votre contrat, informez l'utilisateur avec une exception IllegalArgumentException ou assert. J'opte pour la méthode de la "surprise minimale".

+0

'NullPointerException' serait plus approprié. Et affirmer est principalement juste à des fins de débogage. –

+2

Je pense que IllegalArgumentException est tout aussi valide. – Bnjmn

+0

Puisque null est un argument illégal ce serait très bien, mais NullPointerException est plus spécifique. –

0

Je suis d'accord avec duffymo en général, mais cela dépend aussi de quand exactement vous avez besoin d'utiliser cette valeur potentiellement nulle. Si c'est nécessaire dans le constructeur, alors oui, vous devriez lancer une exception IllegalArgumentException. Si, cependant, la valeur n'est pas nécessaire plus tard (dans une autre méthode, par exemple) alors vous pouvez (et devriez probablement) reporter la vérification de null jusqu'à ce point.

0

Règle de base: Si votre constructeur ne peut pas garantir un état stable et valide avec les paramètres donnés, lancez une exception! Donc, si vous avez besoin de la valeur pour être! = Null pour avoir un état d'objet valide, vérifiez et lancez l'Exception immédiatement.

Quand d'autre le feriez-vous?

Questions connexes