Quelle est cette syntaxe utile pour:
function(String... args)
Est-ce la même chose que d'écrire
function(String[] args)
avec différence uniquement en invoquant cette méthode ou y a-t-il une autre fonctionnalité impliquée avec elle?
La seule différence entre les deux est la façon dont vous appelez la fonction. Avec String var args, vous pouvez omettre la création du tableau.
public static void main(String[] args) {
callMe1(new String[] {"a", "b", "c"});
callMe2("a", "b", "c");
// You can also do this
// callMe2(new String[] {"a", "b", "c"});
}
public static void callMe1(String[] args) {
System.out.println(args.getClass() == String[].class);
for (String s : args) {
System.out.println(s);
}
}
public static void callMe2(String... args) {
System.out.println(args.getClass() == String[].class);
for (String s : args) {
System.out.println(s);
}
}
La différence n'est que lors de l'appel de la méthode. Le second formulaire doit être invoqué avec un tableau, le premier formulaire peut être invoqué avec un tableau (tout comme le second, oui, cela est valide selon Java standard) ou avec une liste de des chaînes (plusieurs chaînes séparées par une virgule) ou sans aucun argument (la seconde doit toujours en avoir une, au moins null doit être passé).
C'est du sucre syntaxiquement. En fait, le compilateur tourne
function(s1, s2, s3);
dans
function(new String[] { s1, s2, s3 });
intérieurement.
avec varargs (String...
) vous pouvez appeler la méthode de cette façon:
function(arg1);
function(arg1, arg2);
function(arg1, arg2, arg3);
Vous ne pouvez pas faire cela avec array (String[]
)
Vous appelez la première fonction comme:
function(arg1, arg2, arg3);
tandis que le second:
String [] args = new String[3];
args[0] = "";
args[1] = "";
args[2] = "";
function(args);
Sur la taille du récepteur, vous obtiendrez un tableau de String. La différence ne concerne que le côté appelant.
class StringArray1
{
public static void main(String[] args) {
callMe1(new String[] {"a", "b", "c"});
callMe2(1,"a", "b", "c");
callMe2(2);
// You can also do this
// callMe2(3, new String[] {"a", "b", "c"});
}
public static void callMe1(String[] args) {
System.out.println(args.getClass() == String[].class);
for (String s : args) {
System.out.println(s);
}
}
public static void callMe2(int i,String... args) {
System.out.println(args.getClass() == String[].class);
for (String s : args) {
System.out.println(s);
}
}
}