Varargs Java (arguments variables) avec exemples

Dans cet article, vous découvrirez les varargs en Java à l'aide d'exemples. Vous apprendrez également quand utiliser les varargs et quand ne pas les utiliser.

Qu'est-ce que varargs en Java?

Supposons que vous créez une méthode Java. Cependant, vous ne savez pas combien d'arguments votre méthode va accepter. Pour résoudre ce problème, Java 1.5 a introduit varargs.

Varargs est un nom court pour les arguments variables. En Java, un argument d'une méthode peut accepter un nombre arbitraire de valeurs. Cet argument qui peut accepter un nombre variable de valeurs est appelé varargs.

La syntaxe pour implémenter varargs est la suivante:

 accessModifier methodName (datatype… arg) (// corps de la méthode)

Afin de définir vararg, (trois points) est utilisé dans le paramètre formel d'une méthode.

Une méthode qui prend un nombre variable d'arguments est appelée une méthode d'arité variable, ou simplement une méthode varargs.

Tout d'abord, regardons l'exemple sans utiliser varargs:

 class NoVararg ( public int sumNumber(int a, int b)( return a+b; ) public int sumNumber(int a, int b, int c)( return a+b+c; ) public static void main( String() args ) ( NoVararg obj = new NoVararg(); System.out.println(obj.sumNumber(1, 2)); System.out.println(obj.sumNumber(1, 2, 3)); ) )

Lorsque vous exécutez ce programme, la sortie sera:

 3 6

Comme vous pouvez le voir clairement, vous avez dû surcharger la sumNumber()méthode pour la faire fonctionner pour 3 arguments.

Que faire si l'utilisateur souhaite ajouter 5 nombres ou 10 ou 100?

Cela peut être géré de manière soignée avec l'utilisation de varargs. Voyons un exemple de code:

Exemple: fonctionnement de varargs

 class VarargExample ( public int sumNumber(int… args)( System.out.println("argument length: " + args.length); int sum = 0; for(int x: args)( sum += x; ) return sum; ) public static void main( String() args ) ( VarargExample ex = new VarargExample(); int sum2 = ex.sumNumber(2, 4); System.out.println("sum2 = " + sum2); int sum3 = ex.sumNumber(1, 3, 5); System.out.println("sum3 = " + sum3); int sum4 = ex.sumNumber(1, 3, 5, 7); System.out.println("sum4 = " + sum4); ) )

Lorsque vous exécutez le programme, la sortie sera:

 longueur de l'argument: 2 somme2 = 6 longueur de l'argument: 3 somme3 = 9 longueur de l'argument: 4 somme4 = 16

Ici, la sumNumber()méthode renvoie la somme des intparamètres qui lui sont passés (peu importe le nombre d'arguments passés).

Comme vous pouvez le voir, les varargs peuvent être vraiment utiles dans certaines situations. Cependant, si vous êtes certain du nombre d'arguments passés à une méthode, utilisez plutôt la surcharge de méthode. Par exemple, si vous êtes certain que cette sumNumber()méthode ne sera utilisée que pour calculer la somme de 2 ou 3 arguments, utilisez la surcharge comme dans le premier exemple.

Prenons un autre exemple. La méthode format () définie dans la bibliothèque Java accepte les varargs. Dans JDK, la format()méthode est définie comme suit:

 public static String format (Locale l, String format, Object… args) (// body)

Exemple: méthode format ()

 class Company ( public static void main(String() args) ( String siteName = "programiz.com"; int empCount = 6; String type = "tutorial website"; System.out.println( String.format( "Site Name : %s, Emp Count: %d Type: %s", siteName, empCount, type ) ); ) )

Lorsque vous exécutez le programme, la sortie sera:

 Nom du site: programiz.com, Emp Count: 6 Type: site de tutoriel 

Comment Varargs fonctionne dans les coulisses?

Considérons le pseudo code suivant:

 public int sumNumber (int… nums) (// corps de la méthode)

La syntaxe indique au compilateur Java que la méthode peut être appelée avec zéro ou plusieurs arguments. Par conséquent, la variable nums est implicitement déclarée comme un tableau de type int( ). Ainsi, à l'intérieur de la méthode, la variable nums est accessible en utilisant la syntaxe de tableau.

En cas d'absence d'arguments, la longueur de nums est 0.

Surcharge des méthodes Varargs

Semblable aux méthodes classiques, vous pouvez surcharger les méthodes vararg.

Lecture recommandée: surcharge de la méthode Java

Exemple: surcharge de la méthode Varargs

 class VarargOverload ( private void test(int… args)( int sum = 0; for (int i: args) ( sum += i; ) System.out.println("sum = " + sum); ) private void test(boolean p, String… args)( boolean negate = !p; System.out.println("negate = " + negate); System.out.println("args.length = "+ args.length); ) public static void main( String() args ) ( VarargOverload obj = new VarargOverload(); obj.test(1, 2, 3); obj.test(true, "hello", "world"); ) ) 

Lorsque vous exécutez le programme, la sortie sera:

 somme = 6 negate = false args.length = 2

Dans le programme ci-dessus, la test()méthode est surchargée en modifiant le nombre d'arguments qu'elle accepte.

Points à retenir lors de l'utilisation de Varargs

Voici quelques points à retenir lorsque vous travaillez avec des vargars Java:

1. Lors de la définition de la signature de méthode, gardez toujours les varargs enfin.

L'argument variable doit être le dernier argument passé à la méthode. Considérons, vous avez appelé une doSomething()méthode comme celle-ci:

 faire quelque chose (1, 2, 3, 4);

Et, votre doSomething()méthode est définie comme:

 // déclaration de méthode incorrecte public void doSomething (int… nums, int p) (// corps de la méthode)

Dans ce cas, le compilateur ne peut pas déterminer le nombre d'arguments passés à nums.

Cependant, si vous définissez votre méthode comme:

 public void doSomething (int p, int… nums) (// corps de la méthode)

Le compilateur Java affecte le premier argument à p et les intarguments restants sont affectés à nums.

2. Une méthode ne peut avoir qu'un seul paramètre varargs.

Par exemple, cette déclaration de méthode est incorrecte:

 int doSomething (int p, float… floatNums, double… doubleNums) (// code)

Ambiguïté dans la surcharge de la méthode Varargs

Considérons votre test()méthode surchargée comme celle-ci:

 class Demo (static void test (int… vargs) (// method body) static void test (int n, int… vargs) (// method body))

Dans le programme ci-dessus, le compilateur devient confus si vous essayez d'appeler la test()méthode même si les test()méthodes sont surchargées et acceptent un nombre différent d'arguments.

Le compilateur ne sait pas quelle méthode appeler. Le compilateur peut penser que vous essayez d'appeler test(int… vargs)avec un seul argument varargs. En outre, le compilateur peut penser que vous essayez d'appeler test(int n, int… vargs)avec un argument passé au premier paramètre avec un second paramètre vide.

Puisqu'il y a deux possibilités, cela crée une ambiguïté. Pour cette raison, vous devrez parfois utiliser deux noms de méthode différents au lieu de surcharger la méthode varargs.

Articles intéressants...