เมื่อเขียนโปรแกรมสำหรับ android ทุกครั้งที่ฉันใช้ AsyncTask วิธี doInBackground จะมีลักษณะดังนี้
protected String doInBackground(String... args)
แต่เมื่อใช้อาร์กิวเมนต์ที่ใดก็ได้ในบล็อกนั้นฉันสามารถเข้าถึงพวกเขาเหมือนอาร์เรย์สตริงปกติเช่นในโปรแกรมของฉัน
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
ซึ่งใช้งานได้ดีและฉันไม่มีปัญหาในการจัดการกับมัน แต่ฉันสงสัยว่าทำไมพวกเขาจึงใช้ (String.... args) แทนที่จะเป็นสตริงปกติ เป็นเพราะในวิธีการโทรคุณก็สามารถเขียนสิ่งที่ชอบ:
new AsyncHandler.execute("argument1","argument2","argument3",...)
แทนที่จะสร้างอาร์เรย์ใหม่เพื่อส่งต่ออาร์กิวเมนต์? แม้ว่าเราจะเขียนได้
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
ซึ่งเป็น verbose อีกเล็กน้อย
(String ... ) และ String [] มีความหมายเหมือนกันในวิธีการทำงาน แต่การส่งผ่านอาร์กิวเมนต์นั้นทำได้ง่ายกว่าการใช้อดีตเนื่องจากไม่จำเป็นต้องสร้างอาร์เรย์? เท่าที่ฉันสามารถบอกได้อดีตยังได้รับการแปลเป็นอาเรย์สตริงในพื้นหลังดังนั้นพวกเขาทั้งสองจะรวบรวมรหัสเดียวกันและเป็นเพียง 'น้ำตาลน้ำตาล'?
String...
ราวกับว่ามันString[]
String[]
String[]
คงเป็นปัญหาที่จะใช้String
พารามิเตอร์ที่แตกต่างกันในอาเรย์ (String ...)
แต่พวกเขาให้ความยืดหยุ่นในการใช้งาน
new String[]{...}
การแปลง (เป็นสิ่งที่เกิดขึ้นจริงเมื่อคุณใช้String...
)
(String ...)
หมายความว่าคุณสามารถเพิ่มString
พารามิเตอร์ได้มากเท่าที่คุณต้องการString[]
เป็นหนึ่งพารามิเตอร์ซึ่งเป็นอาร์เรย์ของสตริง(String ...)
ขึ้นอยู่กับพารามิเตอร์แรกของAsyncTask
มันไม่เสมอString
ไป