J'ai besoin de renvoyer 2 valeurs d'une méthode. Mon approche est la suivante:
- créer une classe interne avec 2 champs qui seront utilisés pour conserver ces 2 valeurs
- mettre la méthode à l'intérieur de cette classe
- instancier la classe et appeler la méthode.
La seule chose qui sera modifiée dans la méthode est qu'à la fin, elle affectera ces 2 valeurs aux champs de l'instance. Ensuite, je peux aborder ces valeurs en faisant référence aux champs de cet objet.
Est-ce un bon design et pourquoi?
java
design-patterns
dhblah
la source
la source
BitInteger[] java.math.BigInteger.divideAndRemainder(BitInteger val)
. Il renvoie 2 entiers comme valeurs de retour dans un tableau.Réponses:
Je dirais cela selon les lignes suivantes:
Pour résumer, je verrais si je peux transformer cet "objet de données" en une classe à part entière avec à la fois des données et un comportement. Comme commentaire supplémentaire, vous souhaiterez peut-être rendre la classe immuable, car son état est défini une fois. Le rendre immuable aidera à éviter qu'il ne soit mal défini ou modifié ultérieurement (par exemple, quelqu'un définissant l'un des champs sur null et le transmettant).
Edit: Comme Patkos Csaba le souligne correctement, le principe appliqué ici est le principe de responsabilité unique ( SRP ) - la classe que vous essayez de créer devrait vraiment avoir une responsabilité (définie comme une raison de changement ). Cette directive de conception devrait vous aider à déterminer si vos deux champs appartiennent à une seule classe ou non. Pour s'en tenir à l'exemple de Wikipedia, votre classe pourrait être considérée comme un type de rapport, auquel cas il est conforme à SRP, mais il est difficile de commenter sans plus d'informations.
la source
Pair<OneClass, AnotherClass>
. Certaines personnes seraient en désaccord . Dans tous les cas,Pair
devrait être un détail d'implémentation et ne jamais apparaître dans une méthode d'API publique.Il y a le concept d'un Tuple qui est présenté dans d'autres langages, comme Python.
On pourrait retourner une instance de cette classe générique qui est facilement réutilisable:
la source
create()
, pour éviter d'avoir à spécifier les paramètres de type dans le constructeur. De plus, je nommerais cette classePair
plutôt queTuple
, étant donné qu'elle ne peut représenter que 2 tuples de valeurs.Il semble que cette classe enlève des responsabilités à une autre classe, et cela me fait penser que ce design n'est pas génial.
Pour une méthode qui renvoie des valeurs multibles, je préfère
ou
Exemple pour la deuxième option:
la source
Placer plusieurs valeurs de retour d'une méthode dans sa propre classe / structure est souvent utilisé dans les systèmes basés sur des messages qui ont une classe pour la demande et la réponse . Un exemple de ceci est le protocole SOAP (Simple Object Access Protocol) .
Au moins, c'est assez courant. Si c'est bon ou mauvais, cela dépend de votre cas d'utilisation spécial.
la source
Réponse courte: vous pouvez renvoyer un tableau ou une liste avec les deux valeurs.
Personnellement, j'écrirais deux méthodes distinctes, comme
la source