Apa arti 3 titik dalam metode berikut?
public void myMethod(String... strings){
// method body
}
sumber
Apa arti 3 titik dalam metode berikut?
public void myMethod(String... strings){
// method body
}
Ini berarti bahwa nol atau lebih objek String (atau array dari mereka) dapat dilewatkan sebagai argumen untuk metode itu.
Lihat bagian "Jumlah Argumen Sewenang-wenang" di sini: http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs
Dalam contoh Anda, Anda dapat menyebutnya sebagai salah satu dari yang berikut:
myMethod(); // Likely useless, but possible
myMethod("one", "two", "three");
myMethod("solo");
myMethod(new String[]{"a", "b", "c"});
Catatan Penting: Argumen yang disampaikan dengan cara ini selalu berupa array - meskipun hanya ada satu. Pastikan Anda memperlakukannya seperti itu di tubuh metode.
Catatan Penting 2: Argumen yang mendapatkan ...
harus menjadi yang terakhir dalam tanda tangan metode. Jadi, myMethod(int i, String... strings)
tidak apa-apa, tetapi myMethod(String... strings, int i)
tidak baik.
Terima kasih kepada Vash untuk klarifikasi dalam komentarnya.
someMethod(new SomeType[] { })
. Itu akan menjadi retasan, bukan?Fitur itu disebut varargs , dan ini fitur yang diperkenalkan di Java 5. Ini artinya fungsi itu bisa menerima banyak
String
argumen:Kemudian, Anda bisa menggunakan
String
var sebagai array:Jawaban ini sangat dipinjam dari kiswa dan Lorenzo ... dan juga dari komentar Graphain.
sumber
Ini Varargs :)
Varargs pendek untuk argumen panjang variabel adalah fitur yang memungkinkan metode untuk menerima jumlah variabel argumen (nol atau lebih). Dengan varargs, menjadi mudah untuk membuat metode yang perlu mengambil sejumlah variabel argumen. Fitur argumen variabel telah ditambahkan di Java 5.
Sintaks dari varargs
Sebuah vararg dipisahkan oleh tiga elipsis (tiga titik) setelah tipe data, bentuk umumnya adalah
Perlu untuk varargs
Sebelum Java 5, jika ada kebutuhan jumlah variabel argumen, ada dua cara untuk mengatasinya
Jika jumlah argumen maksimal, suatu metode dapat dianggap kecil dan diketahui, maka versi yang berlebihan dari metode tersebut dapat dibuat. Jika jumlah maksimum argumen yang bisa diambil suatu metode adalah besar atau / dan tidak diketahui maka pendekatannya adalah untuk menempatkan argumen-argumen itu dalam sebuah array dan meneruskannya ke sebuah metode yang menggunakan array sebagai parameter. Kedua pendekatan ini rawan kesalahan - membangun array parameter setiap saat dan sulit dipertahankan - karena penambahan argumen baru dapat menghasilkan penulisan metode kelebihan beban baru.
Keuntungan varargs
Menawarkan opsi yang lebih sederhana. Lebih sedikit kode karena tidak perlu menulis metode kelebihan beban.
Contoh varargs
Dapat dilihat dari program bahwa panjang digunakan di sini untuk menemukan jumlah argumen yang diteruskan ke metode. Ini dimungkinkan karena varargs secara implisit dilewatkan sebagai sebuah array. Argumen apa pun yang dilewatkan sebagai vararg disimpan dalam array yang disebut dengan nama yang diberikan kepada varargs. Dalam program ini nama array adalah nilai. Perhatikan juga bahwa metode dipanggil dengan jumlah argumen yang berbeda, panggilan pertama dengan empat argumen, kemudian tiga argumen dan kemudian dengan argumen nol. Semua panggilan ini ditangani dengan metode yang sama yang mengambil varargs.
Batasan dengan varargs
Dimungkinkan untuk memiliki parameter lain dengan parameter varargs dalam suatu metode, namun dalam kasus itu, parameter varargs harus menjadi parameter terakhir yang dideklarasikan oleh metode tersebut.
Pembatasan lain dengan varargs adalah bahwa harus ada hanya satu parameter varargs.
Metode overloading varargs
Dimungkinkan untuk membebani metode yang menggunakan parameter varargs. Metode Varargs dapat kelebihan beban oleh -
Jenis parameter varargnya bisa berbeda. Dengan menambahkan parameter lainnya. Contoh metode overloading varargs
Kerancuan dan ambiguitas yang berlebihan
Dalam beberapa kasus, panggilan mungkin tidak jelas sementara kami memiliki metode vararg yang kelebihan beban. Mari kita lihat sebuah contoh
Dalam program ini ketika kita melakukan panggilan ke metode displayData () tanpa parameter apa pun ia melempar kesalahan, karena kompiler tidak yakin apakah panggilan metode ini untuk
displayData(String ... values)
ataudisplayData(int ... values)
Cara yang sama jika kita memiliki metode kelebihan beban di mana seseorang memiliki
vararg
metode satu jenis dan metode lain memiliki satu parameter danvararg
parameter dari jenis yang sama, maka juga kita memiliki ambiguitas - Sebagai Exp -displayData(int ... values)
dandisplayData(int a, int ... values)
Kedua metode kelebihan beban ini akan selalu memiliki ambiguitas.
sumber
Ini adalah cara Java untuk melewatkan varargs (argumen nomor variabel).
Jika Anda terbiasa dengan C, ini mirip dengan
...
sintaks yang digunakanprintf
fungsinya:tetapi dengan jenis yang aman: setiap argumen harus sesuai dengan jenis yang ditentukan (dalam sampel Anda, semuanya harus
String
).Ini adalah contoh sederhana tentang bagaimana Anda dapat menggunakan varargs :
The
...
Argumen ini sebenarnya sebuah array, sehingga Anda bisa melewatiString[]
sebagai parameter.sumber
Dapat diperdebatkan, ini adalah contoh gula sintaksis, karena ini diterapkan sebagai array (yang tidak berarti itu tidak berguna) - Saya lebih suka melewatkan array untuk membuatnya tetap jelas, dan juga mendeklarasikan metode dengan array dari tipe yang diberikan. Namun, lebih merupakan opini daripada jawaban.
sumber
Juga untuk menjelaskan, penting untuk mengetahui bahwa parameter var-arg terbatas pada satu dan Anda tidak dapat memiliki beberapa parar var-art. Misalnya ini tidak sah:
sumber
Anggap saja sebagai kata kunci
params
dalam C #, jika Anda berasal dari latar belakang itu :)sumber
Cara yang sangat umum untuk melihat contoh yang jelas tentang penggunaan tiga titik itu hadir dalam salah satu metode paling terkenal di android AsyncTask (yang saat ini tidak digunakan terlalu banyak karena RXJAVA, belum lagi komponen Arsitektur Google), Anda dapat menemukan ribuan contoh mencari istilah ini, dan cara terbaik untuk memahami dan tidak pernah melupakan lagi arti dari tiga titik adalah bahwa mereka mengekspresikan ... keraguan ... seperti dalam bahasa umum. Yaitu tidak jelas jumlah parameter yang harus dilewati, bisa 0, bisa 1 bisa lebih (array) ...
sumber
String...
sama denganString[]
sumber
String...
samaString[]
, tidak bisakah Anda mengatakannya begitu saja?String[]
memerlukan argumen (setidaknya array kosong) sedangkanString...
tidak (lihat jawaban di atas).Menambahkan ke jawaban yang ditulis dengan baik lainnya, keuntungan yang
varagrs
saya temukan berguna adalah bahwa, ketika saya memanggil metode dengan array sebagai tipe parameter, itu menghilangkan rasa sakit menciptakan array; tambahkan elemen lalu kirim. Sebagai gantinya, saya bisa memanggil metode dengan nilai sebanyak yang saya inginkan; dari nol ke banyak.sumber
Contoh 1:
Contoh 2:
sumber
Sintaks: (Titik tiga ...) -> Berarti kita dapat menambahkan nol atau lebih objek melewati argumen atau melewatkan array objek tipe.
Definisi: 1) Argumen Object ... hanyalah referensi ke array Objects.
2) ('String []' atau String ...) Ia dapat menangani sejumlah objek string. Secara internal ia menggunakan array objek tipe referensi.
3) Jika Anda ingin memanggil metode dengan satu argumen dan kebetulan array, Anda harus secara eksplisit membungkusnya dalam
Aplikasi: Terutama digunakan ketika jumlah argumen dinamis (jumlah argumen tahu saat runtime) dan dalam mengesampingkan. Aturan umum - Dalam metode ini kita dapat meneruskan semua jenis dan sejumlah argumen. Kami tidak dapat menambahkan argumen objek (...) sebelum argumen tertentu. yaitu
sumber