Nomor variabel Java atau argumen untuk suatu metode

147

Apakah mungkin untuk mendeklarasikan metode yang akan memungkinkan sejumlah variabel parameter?

Apa simbolisme yang digunakan dalam definisi yang menunjukkan bahwa metode harus memungkinkan sejumlah variabel parameter?

Jawab: varargs

pengguna69514
sumber
11
Sejak pekerjaan rumah, kami tidak ingin tahu pertanyaan Anda, kami hanya ingin tahu Anda sedang belajar.
HDave

Jawaban:

275

Itu benar. Anda dapat menemukan lebih banyak tentang itu di panduan Oracle di varargs .

Ini sebuah contoh:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

yang bisa disebut sebagai

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.
BalusC
sumber
1
Apakah mungkin untuk melakukan berbagai jenis paramter? mis. (String ... strs, int ... ints). Bagaimana dengan sembarang jenis argumen dalam urutan apa pun?
trusktr
5
@trusktr: jika Anda menginginkan objek apa pun, cukup gunakan Object....
BalusC
2
@trusktr Tidak, primitif bukan objek. Ada penjelasan yang bagus tentang perbedaannya di sini: programmerinterview.com/index.php/java-questions/…
Dick Lucas
5
@ Richard: Menggunakan Object... argsakan berfungsi dengan primitif karena autoboxing .
Sumit
1
@StevenVascellaro: Saya berasumsi bahwa argumen ditangani seperti array, jadi Anda mungkin bisa melakukannyavarargs.length
LMD
15
Variable number of arguments

Dimungkinkan untuk meneruskan sejumlah variabel argumen ke suatu metode. Namun, ada beberapa batasan:

  • Jumlah variabel variabel semua harus bertipe sama
  • Mereka diperlakukan sebagai array dalam metode ini
  • Mereka harus menjadi parameter terakhir dari metode ini

Untuk memahami batasan ini, pertimbangkan metode, dalam cuplikan kode berikut, yang digunakan untuk mengembalikan bilangan bulat terbesar dalam daftar bilangan bulat:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

sumber Oracle Certified Associate Java SE 7 Panduan Studi Programmer 2012

Abey Ella
sumber
14

Iya itu mungkin:

public void myMethod(int... numbers) { /* your code */ }
Dolph
sumber
10

Untuk berbagai jenis argumen, ada 3-titik :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

Kalau begitu sebut saja

foo("Hii"); 
foo("Hii", 146); 

untuk keamanan, gunakan seperti ini:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

Kelemahan utama dari pendekatan ini adalah bahwa jika parameter opsional dari berbagai jenis Anda kehilangan pemeriksaan jenis statis. Silakan, lihat lebih banyak variasi .

T.Todua
sumber
0

Ya Java memungkinkan vargsdalam parameter metode.

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Code_Eat_Sleep
sumber