آرگومان های متغیر (VarArgs)

آرگومان‌های متغیر (VarArgs)، در JDK 5 اضافه شده است و به شما اجازه می‌دهد، تعداد آرگومان‌های دلخواه (متغیر) و البته همنوع را به متد ارسال کنید. برای ایجاد متدی که به تعداد دلخواه پارامتر دریافت کند، از علامت سه نقطه (…) به صورت زیر استفاده می‌شود :

public static void MethodName(int ... argument)
{
    // method body
}

به مثال زیر توجه کنید :

   1: public class MyFirstProgram
   2: {
   3:     static int CalculateSum(int ... numbers)
   4:     {
   5:         int total = 0;
   6: 
   7:         for (int number : numbers)
   8:         {
   9:             total += number;
  10:         }
  11: 
  12:         return total;
  13:     }
  14: 
  15:     public static void main(String[] args)
  16:     {
  17:         System.out.println("1 + 2 + 3 = " + CalculateSum(1, 2, 3));
  18:         System.out.println("1 + 2 + 3 + 4 = " + CalculateSum(1, 2, 3, 4));
  19:         System.out.println("1 + 2 + 3 + 4 + 5 = " + CalculateSum(1, 2, 3, 4, 5));
  20:     }
  21: }
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15

همانطور که در مثال بالا مشاهده می‌کنید، یک متد به نام ()CalculateSum در خط 3 تعریف شده است. برای اینکه این متد تعداد دلخواه پارامتر دریافت کند، از علامت سه نقطه (…) بعد از نوع داده‌ای پارامتر آن استفاده شده است. در اصل کلمه numbers یک آرایه است، که وقتی ما آرگومان‌ها را به متد ارسال می‌کنیم در این آرایه ذخیره می‌شوند. حال متد را سه بار با تعداد مختلف آرگومانها فراخوانی می‌کنیم و سپس با استفاده از حلقه foreach این آرگومانها را جمع و به متد فراخوان برگشت می‌دهیم. وقتی از چندین پارامتر در یک متد استفاده می‌کنید، فقط یکی از آنها باید دارای علامت سه نقطه (…) بوده و همچنین از لحاظ مکانی باید آخرین پارامتر باشد. اگر این پارامتر (پارامتری که دارای سه نقطه است) در آخر پارامترهای دیگر قرار نگیرد و یا از چندین پارامتر سه نقطه دار استفاده کنید با خطا مواجه می‌شوید. به مثالهای اشتباه و درست زیر توجه کنید :

void SomeFunction(int ... x, int ... y) //ERROR

void SomeFunction(int ... x, int y, int z) //ERROR

void SomeFunction(int x, int y, int ... z) //Correct