9
votes

Renvoyer plusieurs valeurs en Java

J'ai écrit une fonction en Java et je souhaite que cette fonction renvoie plusieurs valeurs. Sauf l'utilisation de la matrice et de la structure, existe-t-il un moyen de renvoyer plusieurs valeurs?

My Code: P>

String query40 = "SELECT Good_Name,Quantity,Price from Tbl1 where Good_ID="+x;
Cursor c = db.rawQuery(query, null);
if (c!= null && c.moveToFirst()) 
{
  GoodNameShow = c.getString(0);
  QuantityShow = c.getLong(1);
  GoodUnitPriceShow = c.getLong(2);
  return GoodNameShow,QuantityShow ,GoodUnitPriceShow ;
}


2 commentaires

Ce qui compte n'est pas "Eclipse" mais la langue (Java).


Je réalise que votre code est pseudo-java, mais assurez-vous de nommer vos variables avec CAMELCASE (E.G. GoNnestehow ou GoodunitPricesComment ).


3 Réponses :


30
votes

en Java, lorsque vous souhaitez que une fonction renvoie plusieurs valeurs, vous devez

  • Incorporer ces valeurs dans un objet que vous revenez
  • ou modifier un objet transmis à votre fonction

    Dans votre cas, vous devez clairement définir une classe Afficher qui pourrait avoir des champs Nom , Quantité et prix : xxx

    puis changez votre fonction sur xxx


3 commentaires

@estiedi voulez-vous dire que collection.sort est mauvais style? Vous ne pouvez pas effectuer de code efficace si vous essayez de la rendre compréhensible par des personnes qui ne connaissent pas les faits les plus élémentaires de la langue. Si quelqu'un ne sait pas qu'un objet reçu peut être modifié par une méthode, il doit alors apprendre avant d'être impliqué dans une équipe professionnelle.


Il est toujours regrettable que les langues n'apprenaient pas l'exemple de CLU. L'affectation multiple liée de CLU est d'une utilisation semi-douteuse ( x, y = y, x ), mais plusieurs valeurs de retour sont très utiles ( x, y = fonction (paramètres) ). Forçage d'un objet d'emballage à renvoyer (souvent par des déclarations "propres" similaires à la paire de la classe ) a une pénalité dans de très nombreux appels serrés et transmettre un objet à contenir des valeurs de retour est horriblement Messy sans compilateur garantit que les champs sont remplis.


@ TGM1024 Vous devriez avoir un coup d'œil à Go où Bot renvoyant plusieurs valeurs et plusieurs assignations sont très utiles;)



-1
votes

J'ai développé une approche très fondamentale pour faire face à ce type de situation.

J'ai utilisé une logique de Sperator dans les chaînes.

Par exemple si vous avez besoin si vous avez besoin de Pour revenir dans la même fonction 1. Valeur int 2. Valeur double 3. Valeur de chaîne

Vous pouvez utiliser une chaîne de séparateur

par exemple "," Ce type de chaîne serait n'apparaissent généralement aucun endroit.

Vous pouvez renvoyer une chaîne composée de toutes les valeurs séparées par ce séparateur " ,., ,., "

et convertir en types équivalents où la fonction a été appelée en utilisant String.split (separteur) [index]

renvoie le code suivant pour explication -

séparateur utilisé = "," xxx

Cette approche peut être utilisée comme raccourci lorsque vous ne souhaitez pas augmenter le nombre de classes pour uniquement les retours de fonction

Cela dépend de la situation à la situation qui s'approvisionner à prendre.


3 commentaires

Bien que cette suggestion n'augmente pas le nombre de classes, c'est une approche horrible pour de nombreuses raisons: vous créez plusieurs objets inutiles ( stringbuilder , string s) qui sont beaucoup plus chères qu'une seule instance d'une classe d'utilité. L'effort de récupération des valeurs est injustifiable important, nécessite un code inutile et a un impact notable sur la performance. Comme vous l'avez déjà remarqué, le séparateur ne doit pas apparaître dans la chaîne et c'est une hypothèse injustifiable.


J'ai bu pourvu juste pour que les gens n'utilisent jamais cette approche. C'est mauvais pour la performance et la lisibilité, et le Calee ne sait jamais à quoi s'attendre d'un retour comme ça.


@Still_Learning - Je sais que cette approche est très mauvaise en ce qui concerne la performance, mais cela ne faisait qu'une partie de la pratique que j'avais fait quand j'avais commencé avec la programmation. Je travaillais surtout sur Julia et Matlab où vous pouvez retourner plusieurs vals comme, retour Var1, Var2, etc ... donc quand j'ai commencé avec Java, je venais de faire en tant que partie de la pratique. En fait, j'ai pensé que cela fonctionnerait bien, mais je me sentais plus tard que cela donne une très mauvaise performance.



0
votes

Une approche rapide et laide que j'ai rencontrée à quelques reprises (même dans la bibliothèque Java elle-même) consiste à renvoyer vos valeurs comme objet [] , puis déballer à l'aide de la coulée. par exemple xxx

alors, il est utilisé comme celui-ci: xxx

incorporer les valeurs dans un objet dédié est beaucoup plus propre, mais je le laisse ici quand même.


0 commentaires