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


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.

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


14

Iya itu mungkin:

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

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 .



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; 
   }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.