Java constructeur style: vérifiez les paramètres ne sont pas null

Quelles sont les meilleures pratiques si vous avez une classe qui accepte certains paramètres, mais aucun d'entre eux sont autorisés à être null?

La suite est évidente, mais l'exception est un peu impré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 null, 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 lisible, mais maintenant, le code du constructeur n'est pas 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 est-il une alternative qui est plus largement acceptée?

  • Je recommande numéro 2. Juste parce qu'il semble laid ne signifie pas qu'il n'est pas bon. Souvenez-vous de code est pour l'homme à lire et à comprendre non pas des machines.
  • La différence de comportement entre la deuxième et la troisième approche est assez importante, à jamais répondre à cette question de façon raisonnable. Le second permet de les valeurs à définir à null par la suite par les organismes de normalisation. Si vous voulez cohérente de comportement, alors vous devez en aucune façon aller pour 3, ce n'est pas un problème du style plus.
  • qui suppose que les deux 2 et 3 ont les setters. Si les 2 n'ont pas de setter puis c'est essentiellement le même que 3; à l'exception de l'utilisateur peut définir l'objet après la création de l'objet.
InformationsquelleAutor | 2010-06-08