Quelles sont les meilleures pratiques si vous avez une classe qui accepte certains paramètres mais qu'aucun d'entre eux n'est autorisé à être un paramètre de la classe ? null
?
Le point suivant est évident, mais l'exception est un peu moins précise :
public class SomeClass
{
public SomeClass(Object one, Object two)
{
if (one == null || two == null)
{
throw new IllegalArgumentException("Parameters can't be null");
}
//...
}
}
Ici, les exceptions permettent de savoir quel paramètre est nul, mais le constructeur est maintenant assez laid :
public class SomeClass
{
public SomeClass(Object one, Object two)
{
if (one == null)
{
throw new IllegalArgumentException("one can't be null");
}
if (two == null)
{
throw new IllegalArgumentException("two can't be null");
}
//...
}
Ici, le constructeur est plus soigné, mais le code du constructeur n'est plus vraiment dans le constructeur :
public class SomeClass
{
public SomeClass(Object one, Object two)
{
setOne(one);
setTwo(two);
}
public void setOne(Object one)
{
if (one == null)
{
throw new IllegalArgumentException("one can't be null");
}
//...
}
public void setTwo(Object two)
{
if (two == null)
{
throw new IllegalArgumentException("two can't be null");
}
//...
}
}
Lequel de ces styles est le meilleur ?
Ou existe-t-il une alternative plus largement acceptée ?
3 votes
Je recommande le numéro 2. Ce n'est pas parce que c'est moche que ce n'est pas correct. N'oubliez pas que le code est destiné à être lu et compris par les humains, et non par les machines.
6 votes
La différence de comportement entre la deuxième et la troisième approche est assez importante pour répondre raisonnablement à cette question. La deuxième approche permet de fixer les valeurs à
null
par la suite. Si vous voulez un comportement cohérent, vous devez en tout cas opter pour le 3, ce n'est plus une question de style.0 votes
@BalusC cela suppose que les 2 et 3 ont des setters. Si 2 n'a pas de méthodes de réglage, c'est essentiellement la même chose que 3, sauf que l'utilisateur peut régler l'objet après sa création.