Est-ce une mauvaise pratique de faire un setter retour “ce”?

Est-il une bonne ou une mauvaise idée de faire des setters de java retour "ce"?

public Employee setName(String name){
   this.name = name;
   return this;
}

Ce modèle peut être utile parce que vous pouvez enchaîner les setters comme ceci:

list.add(new Employee().setName("Jack Sparrow").setId(1).setFoo("bacon!"));

au lieu de cela:

Employee e = new Employee();
e.setName("Jack Sparrow");
...and so on...
list.add(e);

...mais ça va à l'encontre de la norme de la convention. Je suppose qu'il pourrait être utile, juste parce que cela peut faire que le setter de faire autre chose d'utile. J'ai vu ce motif est utilisé certains endroits (par exemple JMock, JPA), mais il semble rare, et seulement généralement utilisé pour définir les Api où ce modèle est utilisé partout.

Mise à jour:

Ce que j'ai décrit est évidemment valable, mais ce que je suis à la recherche de quelques réflexions sur que ce soit généralement acceptable, et s'il y a des pièges ou les meilleures pratiques. Je sais que sur le Générateur de modèle mais il est un peu plus impliqué alors ce que je viens de décrire - comme Josh Bloch décrit il y est associé à un Constructeur statique de la classe pour la création d'objet.

  • Depuis que j'ai vu ce modèle il y a un moment, je le fais dans la mesure du possible. Si une méthode n'est pas explicitement besoin de retourner quelque chose à faire son travail, elle revient aujourd'hui this. Parfois, j'ai même de modifier la fonction de sorte qu'au lieu de retourner une valeur, il fonctionne sur un membre de l'objet, juste pour que je puisse le faire. C'est merveilleux. 🙂
  • Pour télescopique setters retour auto et dans les constructeurs, je préfère utiliser avec name(String nom) au lieu de setName(String name). Comme vous l'avez souligné une pratique courante et de l'attente pour setter est de retour void. "Non standard" poseurs ne peut pas bien se comporter avec les cadres existants, par exemple les gestionnaires de l'entité JPA, Spring, etc.
  • Veuillez introduire des sauts de ligne avant chaque invocation 🙂 Et configurer votre IDE ou obtenir un bon un, si ce n'est pas le respect de cette.
  • Largement utilisé frameworks (Spring et Hibernate par exemple) de manière stricte (au moins ils ont utilisé pour) adhérer à void-setters convention
  • Voir aussi stackoverflow.com/questions/5741369/...
InformationsquelleAutor Ken Liu | 2009-08-28