Saat pemrograman untuk android, setiap kali saya menggunakan AsyncTask, metode doInBackground terlihat seperti ini.
protected String doInBackground(String... args)
Tetapi ketika menggunakan argumen di mana saja di blok itu saya dapat mengaksesnya seperti array String normal misalnya di program saya
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
Yang berfungsi dengan baik dan saya tidak punya masalah menanganinya. Tapi saya bertanya-tanya mengapa mereka menggunakan (String ... args) bukan array normal dari String. Apakah hanya karena dalam metode pemanggilan Anda hanya dapat menulis sesuatu seperti:
new AsyncHandler.execute("argument1","argument2","argument3",...)
alih-alih membuat array baru untuk meneruskan argumen? Padahal kita bisa menulis
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
yang sedikit lebih verbose.
Apakah (String ...) dan String [] identik dalam cara kerjanya, tetapi argumen yang lewat lebih mudah menggunakan yang pertama karena tidak perlu membuat array? Sejauh yang saya tahu, yang pertama juga akan diterjemahkan ke array string di latar belakang sehingga mereka berdua mengkompilasi ke kode yang sama dan itu hanya 'gula sintaksis'?
(String ...)
berarti Anda dapat menambahkanString
param sebanyak yang Anda inginkan,String[]
adalah salah satu parameter yang merupakan array dari string.(String ...)
tergantung pada param pertamaAsyncTask
, itu tidak selaluString
.String...
seolah-olahString[]
String[]
, tetapi mari kita asumsikan itu secara defaultString[]
. Ini akan menjadi masalah untuk menggunakanString
param yang berbeda dalam array. Sebaliknya mereka memberikan fleksibilitas untuk digunakan(String ...)
.new String[]{...}
untuk mengkonversi (itu yang sebenarnya terjadi ketika Anda menggunakanString...
)Jawaban:
(String ...)
adalah array dari parameter tipeString
, dimana asString[]
adalah parameter tunggal .Sekarang di sini
String[]
dapat mengisi penuh tujuan yang sama di sini tetapi(String ...)
memberikan lebih banyak keterbacaan dan kemudahan untuk digunakan.Ini juga menyediakan opsi bahwa kita dapat melewati beberapa array
String
daripada menggunakan satuString[]
.sumber
String[]
dapat diteruskan ke metode yang menggunakanString...
parameter, duaString[]
s tidak bisa. Tidak ada rangkaian array implisit yang terjadi di sini.Fitur dari String [] vs String ... adalah "String ..." tidak perlu menjadi bagian dari panggilan.
Maka jika Anda memanggil
callerTest();
Output akan:sumber