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...
seolah-olahString[]
String[]
, tetapi mari kita asumsikan itu secara default String[]
. Ini akan menjadi masalah untuk menggunakan String
param yang berbeda dalam array. Sebaliknya mereka memberikan fleksibilitas untuk digunakan (String ...)
.
new String[]{...}
untuk mengkonversi (itu yang sebenarnya terjadi ketika Anda menggunakan String...
)
(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
.