Java, 3 points dans les paramètres
Que font les 3 points de suspension à la méthode suivante veux dire?
public void myMethod(String... strings){
//method body
}
Vous devez vous connecter pour publier un commentaire.
Que font les 3 points de suspension à la méthode suivante veux dire?
public void myMethod(String... strings){
//method body
}
Vous devez vous connecter pour publier un commentaire.
Cela signifie que zéro, un ou plusieurs objets de Chaîne (ou un tableau d'entre eux) peut être passé comme argument(s) pour cette méthode.
Voir le "Nombre Arbitraire d'Arguments" article ici: http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs
Dans votre exemple, vous pouvez l'appeler comme les suivantes:
Remarque importante: L'argument(s) passée dans cette voie est toujours un tableau - même si il y a juste un. Assurez-vous de le traiter de cette façon dans le corps de la méthode.
Note importante 2: L'argument qui obtient le
...
doit être le dernier de la signature de la méthode. Donc,myMethod(int i, String... strings)
est correct, maismyMethod(String... strings, int i)
n'est pas correct.Grâce à Vash'pour les précisions dans son commentaire.
someMethod(new SomeType[] { })
. Que serait un hack, ne serait-il pas?Cette fonction est appelée varargs, et c'est une fonctionnalité introduite dans Java 5. Cela signifie que la fonction peut recevoir plusieurs
String
arguments:Ensuite, vous pouvez utiliser le
String
var comme un tableau:Cette réponse s'inspire fortement de kiswa et Lorenzo... et aussi de la Graphain commentaire.
C'est Varargs 🙂
Les varargs court de longueur variable d'arguments est une fonctionnalité qui permet à la méthode d'accepter un nombre variable d'arguments (zéro ou plus). Avec varargs, il est devenu simple de créer des méthodes qui ont besoin de prendre un nombre variable d'arguments. La fonction de la variable d'argument a été ajoutée dans Java 5.
Syntaxe de varargs
Un vararg est secified par trois points de suspension (trois points) après le type de données, sa forme générale est
Besoin pour varargs
Avant Java 5, dans le cas où il était nécessaire de nombre variable d'arguments, il y avait deux façons de le gérer
Si le nombre maximum d'arguments, une méthode peut prendre était de petite taille et connue, puis des versions surchargées de la méthode pourrait être créé.
Si le nombre maximal d'arguments d'une méthode pourrait prendre soit de grande ou/et de l'inconnu, alors l'approche a été de mettre ces arguments dans un tableau et de les transmettre à une méthode qui prend du tableau comme paramètre.
Ces 2 approches sont sujettes à l'erreur - la construction d'un tableau de paramètres à chaque fois et difficile à maintenir - l'ajout de nouvelles argument peut entraîner à l'écriture d'une nouvelle méthode surchargée.
Avantages de varargs
Offre beaucoup plus simple option.
Moins de code que pas besoin d'écrire des méthodes surchargées.
Exemple de varargs
Il peut être vu à partir du programme que la longueur est utilisée ici pour trouver le nombre d'arguments passés à la méthode. Il est possible que parce que varargs sont implicitement passé comme un tableau. Quels que soient les arguments sont passés comme varargs sont stockées dans un tableau qui est désigné par le nom donné à varargs. Dans ce programme, le nom du tableau sont les valeurs.
Notez également que la méthode est appelée avec un nombre différent de l'argument, le premier appel avec quatre arguments, puis trois arguments, puis avec des arguments zéro. Tous ces appels sont gérés par la même méthode qui prend varargs.
De Restriction avec les varargs
Il est possible d'avoir d'autres paramètres avec des varargs paramètre d'une méthode, mais dans ce cas, varargs paramètre doit être le dernier paramètre déclaré par la méthode.
Un autre restriction avec varargs est qu'il doit y avoir un seul varargs paramètre.
Surcharge varargs Méthodes
Il est possible de surcharger une méthode qui prend varargs paramètre.
Varargs méthode peut être surchargé par
Types de son vararg paramètre peut être différent.
En ajoutant d'autres paramètres.
Exemple de surcharge varargs méthode
Varargs et la surcharge de l'ambiguïté
Dans certains cas, l'appel peut être ambiguë, alors que nous avons surchargé varargs méthode.
Voyons un exemple
Dans ce programme lorsque nous faisons un appel à displayData() la méthode sans paramètre, il déclenche une erreur, car le compilateur n'est pas sûr que l'appel de cette méthode est pour
displayData(String ... values)
oudisplayData(int ... values)
Même façon, si nous avons des méthodes surchargées où l'on a le
vararg
méthode d'un type et d'une autre méthode a un paramètre etvararg
paramètre du même type, puis nous avons aussi de l'ambiguïté -Comme Exp -
displayData(int ... values)
etdisplayData(int a, int ... values)
Ces deux méthodes surchargées aura toujours de l'ambiguïté.
C'est la Java de manière à passer varargs (nombre variable d'arguments).
Si vous êtes familier avec le C, ce qui est similaire à la
...
syntaxe utilisé leprintf
fonction:mais dans un type de mode sûre: chaque argument doit se conformer avec le type spécifié (dans votre exemple, ils devraient l'être toutes
String
).C'est un exemple simple de la façon dont vous pouvez utiliser varargs:
La
...
argument est en fait une matrice, de sorte que vous pouvez passer uneString[]
en tant que paramètre.Sans doute, c'est un exemple du sucre syntaxique, puisqu'il est mis en œuvre comme un tableau de toute façon (ce qui ne veut pas dire que c'est inutile) - je préfère le passage d'un tableau à tenir à l'écart, et également déclarer les méthodes avec des tableaux de type donné. Plutôt un avis qu'une réponse, si.
Suffit de penser que le mot-clé
params
en C#, si vous êtes en provenance de l'arrière-plan 🙂Également à jeter un peu de lumière, il est important de savoir que var-arg paramètres sont limités à un seul et vous ne pouvez pas avoir plusieurs var-art params. Par exemple c'est illigal:
Vraiment une façon commune de voir un clair exemple de l'utilisation de ces trois points, il est présent dans l'un des plus célèbres méthodes sur android AsyncTask ( qui aujourd'hui n'est pas utilisé trop de raison de RXJAVA, pour ne pas mentionner le Google composants de l'Architecture), vous pouvez trouver des milliers d'exemples de la recherche de ce terme, et la meilleure façon de comprendre et de ne jamais oublier plus la signification des trois points, c'est qu'ils expriment un doute ...... tout comme dans le langage commun. À savoir qu'il n'est pas clair du nombre de paramètres qui doivent être adoptés, pourraient être 0, peut être de 1 pourrait être plus( un tableau)...
String...
est le même queString[]
String...
est le même queString[]
, ne pourriez-vous dire cela?String[]
nécessite un argument (au moins un tableau vide) alors queString...
ne fonctionne pas (voir la réponse ci-dessus).