Si une méthode remplit / modifie un objet, il serait préférable de renvoyer l'objet ou de conserver le type de retour en tant que vide et que la méthode modifierait l'objet via sa référence?
public Obj populate(Obj o) { .... return o; } public void populate(Obj o) { .... }
6 Réponses :
Je dépend de votre style, mais un avantage du retour: vous pouvez appeler Regardez comment peupluler (o) .DosomethingelseLse (); code>, c'est-à-dire des appels de méthode en chaîne. P>
StringBuilder CODE> Est-ce que, par exemple, qui permet des choses comme celle-ci
New StringBuilder (). Ajoutez ("A"). ANNEXE ("B") ... . code> p>
StringBuilder ne renvoie pas son argument. Il se retourne.
Remarque: l'argument à OP est renvoyé, pas le type qui déclare la méthode.
Je dirais la "première" option, pour renvoyer l'objet. Cela n'a pas d'inconvénients et vous laissez une "chambre" pour effectuer un changement de mise en œuvre à l'avenir (par exemple, retourner une "copie profonde" au lieu du même objet) sans modifier la signature. P>
En bref, je le vois plus flexible. P>
Je choisirais le premier, car il vous permettrait de choisir de modifier l'objet que vous réussissez et de le renvoyer, ou de prendre une copie de l'objet et de renvoyer la copie.
public Obj populate(Obj o) { Obj returnObj = o.clone(); .... return returnObj; }
Il est préférable de modifier l'objet ceci code> et de laisser les arguments inchangés.
Le second est moins déroutant pour moi, car il n'est pas clair du premier s'il est retourné et que les objets passés sont les mêmes, et je ne trouve pas normal d'ignorer une valeur retournée. P>
J'irais avec Séparation de la requête de commande généralement. P>
C'est-à-dire que si la méthode mute l'argument, elle ne doit pas également renvoyer l'argument. P>
Il existe cependant (comme indiqué dans l'article Wikipedia ci-dessus) des situations où la violation de ce principe général est appropriée. P>
Stackoverflow.com/questions/40480/is-java-pass -By-Référence
Pour moi '' 'Retour O' '' La déclaration dépend de votre implémentation de la Contrete. L'objet de passage par REF modifiera l'objet dans la pile. À moi '' 'Retour O' '' La déclaration n'est pas nécessaire.