एंड्रॉइड के लिए प्रोग्रामिंग करते समय, जब भी मैं एक 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;
}
जो ठीक काम करता है और मुझे इससे निपटने में कोई समस्या नहीं है। लेकिन मैं सोच रहा हूं कि स्ट्रिंग्स के सामान्य सरणी के बजाय वे (स्ट्रिंग।। args) का उपयोग क्यों करते हैं। क्या यह सिर्फ इसलिए है क्योंकि कॉलिंग पद्धति में आप कुछ ऐसा लिख सकते हैं:
new AsyncHandler.execute("argument1","argument2","argument3",...)
तर्कों को पारित करने के लिए एक नया सरणी बनाने के बजाय? हालांकि हम लिख सकते थे
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
जो एक और अधिक वर्बोज़ सा है।
क्या (स्ट्रिंग ...) और स्ट्रिंग [] पर्यायवाची हैं कि वे कैसे काम करते हैं, लेकिन तर्क पास करना पूर्व का उपयोग करना आसान है क्योंकि कोई सरणी बनाने की आवश्यकता नहीं है? जहाँ तक मैं बता सकता हूँ, पूर्व भी पृष्ठभूमि में एक स्ट्रिंग सरणी में अनुवाद किया जाता है, तो क्या वे दोनों एक ही कोड के लिए संकलित करेंगे और यह सिर्फ 'वाक्यगत चीनी' है?
String...
इसे कॉल कर सकते हैं जैसे कि यह हैString[]
String[]
, लेकिन यह डिफ़ॉल्ट रूप से मान लेता है String[]
। यह String
एक सरणी में विभिन्न परम का उपयोग करने के लिए काफी समस्या होती । इसके बजाय उन्होंने उपयोग करने के लिए एक लचीलापन दिया (String ...)
।
new String[]{...}
बदलने के लिए एक सरल आवरण है (यह वास्तव में तब होता है जब आप उपयोग करते हैं String...
)
(String ...)
मतलब आप जितनाString
चाहें उतना परम जोड़ सकते हैं,String[]
एक पैरामीटर है जो स्ट्रिंग्स की एक सरणी है।(String ...)
के पहले परम पर निर्भर करता हैAsyncTask
, यह हमेशा नहीं होता हैString
।