7
votes

Java renvoie l'objet / modifier l'objet (Directives de codage)

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)
{
....
}


2 commentaires

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.


6 Réponses :


2
votes

Je dépend de votre style, mais un avantage du retour: vous pouvez appeler peupluler (o) .DosomethingelseLse (); , c'est-à-dire des appels de méthode en chaîne.

Regardez comment StringBuilder Est-ce que, par exemple, qui permet des choses comme celle-ci New StringBuilder (). Ajoutez ("A"). ANNEXE ("B") ... .


2 commentaires

StringBuilder ne renvoie pas son argument. Il se retourne.


Remarque: l'argument à OP est renvoyé, pas le type qui déclare la méthode.



1
votes

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.

En bref, je le vois plus flexible.


0 commentaires

0
votes

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;
}


0 commentaires

0
votes

Il est préférable de modifier l'objet ceci et de laisser les arguments inchangés. xxx Voir StressBuilder comme exemple.


0 commentaires

0
votes

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.


0 commentaires

2
votes

J'irais avec Séparation de la requête de commande généralement.

C'est-à-dire que si la méthode mute l'argument, elle ne doit pas également renvoyer l'argument.

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.


0 commentaires