Parfois, vous souhaitez renvoyer plusieurs valeurs d'une fonction. Comment cela se fait-il normalement en Java?
Une option consiste à utiliser un tableau, comme cet extrait de code Python qui renvoie une liste ou un tuple:
value, success = read_unreliably()
if success:
print value
Une autre option serait de renvoyer un hachage / dict, comme cet exemple JavaScript:
var result = readUnreliably()
if (result.success) {
alert(value);
}
Un autre serait de créer un objet personnalisé juste à cet effet, comme cet exemple Java:
ReadUnreliablyResult result = readUnreliably()
if (result.getSuccess()) {
System.out.println(result.getValue());
}
Bien sûr, vous pouvez également utiliser des variables globales pour stocker ce dont vous avez besoin au lieu de passer des choses, mais disons simplement que ce n'est pas une option.
java
coding-style
Mike M. Lin
la source
la source
Réponses:
Douloureusement.
Ces techniques ne fonctionnent pas bien en Java; les valeurs devraient être converties à partir d'Object.
C'est le plus courant, mais il est fastidieux de créer toutes ces petites classes. En C ++, il est courant d'utiliser std :: pair mais cela n'est généralement pas fait en Java.
Avec Lombok, il est assez facile de créer de petits objets personnalisés:
}
la source
Oui, la façon de créer un
struct
/tuple
/record
en Java consiste à créer une classe. Si c'est uniquement pour un usage interne, je préfère utiliser une petite classe immuable de type struct avec des champs publics.Exemples:
C'est beaucoup plus facile à faire à Scala:
la source
Tuple2[Boolean, Int]
. Bien que dans cet exemple spécifique , vous retourniez unOption[Int]
.Pour l'exemple que vous avez donné, lever une exception serait la manière la plus standard de la gérer:
De plus, si vous vous efforcez d'avoir des fonctions "Do One Thing", la fonction de retour de plusieurs valeurs est moins nécessaire, bien que parfois pratique.
la source
Nous avons une classe générique Pair qui peut stocker une instance de A et une instance de B. Vous pouvez probablement créer un triplet ou quadruplet de la même manière.
la source
Pair<String, Integer>
, qu'est-ce que cela signifie? que représentent ces valeurs? vous ne pouvez pas savoir sans avoir lu l'implémentation de la méthode.En Java, votre fonction retournerait un objet (ou peut-être null en cas d'échec). De cette façon, plusieurs éléments de données peuvent être retournés.
la source
Il n'y a aucun moyen explicite de renvoyer plusieurs variables en Java, mais il existe quelques approches:
la source