Java Varargs (Variable Argumen) Dengan Contohnya

Dalam artikel ini, anda akan belajar mengenai varargs di Java dengan bantuan contoh. Anda juga akan belajar bila menggunakan varargs dan kapan tidak menggunakannya.

Apa itu varargs di Java?

Katakan anda membuat kaedah Java. Namun, anda tidak pasti berapa banyak hujah yang akan diterima oleh kaedah anda. Untuk mengatasi masalah ini, Java 1.5 memperkenalkan varargs.

Varargs adalah nama pendek untuk argumen pemboleh ubah. Di Jawa, argumen kaedah dapat menerima sejumlah nilai sewenang-wenangnya. Hujah ini yang dapat menerima jumlah nilai yang berubah-ubah disebut varargs.

Sintaks untuk melaksanakan varargs adalah seperti berikut:

 accessModifier methodName (datatype… arg) (// kaedah kaedah)

Untuk menentukan vararg, (tiga titik) digunakan dalam parameter formal suatu kaedah.

Kaedah yang menggunakan jumlah argumen yang berubah-ubah disebut kaedah variabel-arity, atau hanya kaedah varargs.

Pertama, mari kita lihat contohnya tanpa menggunakan 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)); ) )

Semasa anda menjalankan program ini, outputnya adalah:

 3 6

Seperti yang anda dapat lihat dengan jelas, anda harus membebankan sumNumber()kaedah untuk menjadikannya berfungsi untuk 3 argumen.

Bagaimana jika pengguna ingin menambah 5 nombor atau 10 atau 100?

Perkara ini dapat ditangani dengan kemas dengan penggunaan varargs. Mari lihat contoh kod:

Contoh: Kerja 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); ) )

Semasa anda menjalankan program, outputnya adalah:

 panjang hujah: 2 sum2 = 6 panjang hujah: 3 sum3 = 9 panjang hujah: 4 sum4 = 16

Di sini, sumNumber()kaedah mengembalikan jumlah intparameter yang diteruskan kepadanya (tidak kira jumlah argumen yang dilalui).

Seperti yang anda lihat, vararg sangat berguna dalam beberapa keadaan. Walau bagaimanapun, jika anda yakin mengenai jumlah argumen yang diteruskan ke suatu kaedah, kaedah yang digunakan sebagai pemunggahan berlebihan. Sebagai contoh, jika anda yakin sumNumber()kaedah itu akan digunakan hanya untuk mengira jumlah 2 atau 3 argumen, gunakan beban berlebihan seperti pada contoh pertama.

Mari kita ambil contoh lain. Metode format () yang ditentukan dalam perpustakaan Java menerima varargs. Dalam JDK, format()kaedahnya ditakrifkan sebagai berikut:

 format String statik awam (Locale l, String format, Object… args) (// badan)

Contoh: kaedah () Kaedah

 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 ) ); ) )

Semasa anda menjalankan program, outputnya adalah:

 Nama Tapak: programiz.com, Emp Count: 6 Jenis: laman web tutorial 

Bagaimana varargs berfungsi di belakang tabir?

Mari pertimbangkan kod pseudo berikut:

 public int sumNumber (int… num) (// badan kaedah)

The sintaks memberitahu pengkompil Java bahawa kaedah yang boleh dipanggil dengan sifar atau lebih argumen. Akibatnya, pembolehubah angka dinyatakan secara tersirat sebagai susunan jenis int( ). Oleh itu, di dalam kaedah ini, pembolehubah angka diakses menggunakan sintaks array.

Sekiranya tidak ada hujah, panjang angka adalah 0.

Kaedah Varargs yang berlebihan

Sama seperti kaedah biasa, anda boleh membebankan kaedah vararg.

Bacaan yang Disyorkan: Kaedah Java Berlebihan

Contoh: Kaedah Varargs Overloading

 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"); ) ) 

Semasa anda menjalankan program, outputnya adalah:

 jumlah = 6 negate = false args.length = 2

Dalam program di atas, test()kaedah dibebani dengan mengubah jumlah argumen yang diterima.

Perkara yang perlu diingat semasa menggunakan Varargs

Berikut adalah beberapa perkara yang harus anda ingat semasa bekerja dengan Java vargars:

1. Semasa menentukan tandatangan kaedah, sentiasa menyimpan varargs.

Argumen pemboleh ubah mestilah argumen terakhir yang disampaikan kepada kaedah. Mari kita pertimbangkan, anda menggunakan doSomething()kaedah seperti ini:

 doSomething (1, 2, 3, 4);

doSomething()Kaedah anda ditakrifkan sebagai:

 // pengisytiharan kaedah yang salah awam tidak sah melakukan sesuatu (int … angka, int p)

Dalam kes ini, penyusun tidak dapat mengetahui jumlah argumen yang diserahkan ke angka.

Walau bagaimanapun, jika anda menentukan kaedah anda sebagai:

 public void doSomething (int p, int… num) (// kaedah kaedah)

Penyusun Java memberikan argumen pertama ke p, dan intargumen selebihnya ditugaskan ke angka.

2. Kaedah hanya boleh mempunyai satu parameter varargs.

Contohnya, pengisytiharan kaedah ini tidak betul:

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

Kekaburan dalam kaedah Varargs berlebihan

Mari anggap anda test()kaedah berlebihan seperti ini:

 kelas Demo (ujian void statik (int… vargs) (// kaedah kaedah) ujian kekosongan statik (int n, int… vargs) (// kaedah kaedah))

Dalam program di atas, penyusun menjadi bingung jika anda cuba menggunakan test()kaedah tersebut walaupun test()kaedahnya terlalu banyak dan menerima jumlah argumen yang berbeza.

Penyusun tidak tahu kaedah mana yang hendak dihubungi. Penyusun mungkin berfikir, anda cuba memanggil test(int… vargs)dengan satu argumen varargs. Juga, penyusun mungkin berfikir, anda cuba memanggil test(int n, int… vargs)dengan argumen yang diteruskan ke parameter pertama dengan parameter kedua yang kosong.

Oleh kerana ada dua kemungkinan, itu menyebabkan kekaburan. Oleh kerana itu, kadangkala anda mungkin perlu menggunakan dua nama kaedah yang berbeza dan bukannya menggunakan kaedah varargs yang berlebihan.

Artikel menarik...