App Engine docs में, इस विधि हस्ताक्षर में इलिप्सिस (JID...
) क्या है?इस विधि हस्ताक्षर में इलिप्सिस (...) क्या है?
public MessageBuilder withRecipientJids(JID... recipientJids)
उन तीन बिंदुओं का कार्य क्या है?
App Engine docs में, इस विधि हस्ताक्षर में इलिप्सिस (JID...
) क्या है?इस विधि हस्ताक्षर में इलिप्सिस (...) क्या है?
public MessageBuilder withRecipientJids(JID... recipientJids)
उन तीन बिंदुओं का कार्य क्या है?
वे जावा varargs हैं। वे आपको किसी विशिष्ट प्रकार की ऑब्जेक्ट्स को पास करने देते हैं (इस मामले में वे जेआईडी प्रकार के होते हैं)।
अपने उदाहरण में, निम्न फ़ंक्शन कॉल मान्य होगा:
MessageBuilder msgBuilder; //There should probably be a call to a constructor here ;)
MessageBuilder msgBuilder2;
msgBuilder.withRecipientJids(jid1, jid2);
msgBuilder2.withRecipientJids(jid1, jid2, jid78_a, someOtherJid);
यहाँ अधिक देखें: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
ध्यान दें कि तर्क भी जेआईडी की सरणी के रूप में पारित किया जा सकता है (इससे varargs पिछड़े संगत बनाता है)। – mjn
यह भी ध्यान दें कि 0 varargs (कुछ नहीं) गुजरना कानूनी है। –
अंतिम लेकिन कम से कम नहीं, vararg विधि का अंतिम पैरामीटर होना चाहिए। तो, आपके पास एक ही विधि में दो vararg पैरामीटर नहीं हो सकते हैं। हो सकता है, आप इस विधि को दिलचस्प बना सकते हैं http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList%28T...%29 – BlackBrain
इसका मतलब है कि विधि एक variable number of arguments प्रकार JID
की ("varargs") स्वीकार करता है। विधि के भीतर, recipientJids
प्रस्तुत किया गया है।
यह उन मामलों के लिए आसान है जहां आपके पास ऐसी विधि है जो वैकल्पिक तरीके से एक से अधिक तर्कों को वैकल्पिक तरीके से संभाल सकती है, और आपको कॉल लिखने की अनुमति देती है जो बिना किसी विधि के एक, दो या तीन पैरामीटर पास कर सकती है फ्लाई पर एक सरणी बनाने की कुरूपता।
यह सी से sprintf
जैसे मुहावरे को भी सक्षम बनाता है; उदाहरण के लिए String.format()
देखें।
वे varargs
हैं जिनका उपयोग वे किसी भी प्रकार की तर्क प्राप्त करने के लिए किया जाता है।
उदाहरण के लिए PrintStream.printf विधि इसका उपयोग करती है, क्योंकि आप नहीं जानते कि आप कितने तर्क का उपयोग करेंगे।
इन्हें केवल तर्कों की अंतिम स्थिति के रूप में उपयोग किया जा सकता है।
varargs
Java 1.5
तीन डॉट (...) अंकन वास्तव में गणित से लिया गया है पर जोड़ दिया गया था, और यह अर्थ है "... और इतने पर"।
जावा में इसके उपयोग के लिए, यह varargs
है, जिसका अर्थ है कि विधि कॉल में किसी भी संख्या में तर्क जोड़े जा सकते हैं। केवल सीमाएं हैं कि varargs
विधि हस्ताक्षर के अंत में होना चाहिए और केवल एक विधि हो सकती है।
रास्ता अंडाकार या varargs विधि के अंदर उपयोग करने के लिए है के रूप में अगर यह एक सरणी थे:
obj.PrintWithEllipsis(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"
के अंदर:
public void PrintWithEllipsis(String...setOfStrings) {
for (String s : setOfStrings)
System.out.println(s);
}
इस विधि निम्नलिखित के रूप में कहा जा सकता है PrintWithEllipsis
, setOfStrings
का प्रकार स्ट्रिंग की एक सरणी है। तो तुम संकलक कुछ काम बचा सकता है और एक सरणी गुजारें सकता:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
लिए तरीकों varargs, एक दृश्य पैरामीटर एक ही प्रकार की एक सरणी होने के रूप में व्यवहार किया जाता है।तो अगर दो हस्ताक्षरों केवल में है कि एक एक दृश्य और अन्य एक सरणी वाणी, इस उदाहरण में लेकर मतभेद हैं:
void process(String[] s){}
void process(String...s){}
तो एक संकलन समय त्रुटि उत्पन्न होती है।
स्रोत: The Java Programming Language विनिर्देश, जहां तकनीकी शब्द variable arity parameter
सामान्य शब्द varargs
की बजाय है।
+1 सरणी बनाम इलिप्सिस के लिए +1 विधि हस्ताक्षर बिट। – aspen100
आप एक पैरामीटर को परिभाषित कर सकते हैं जो आपके तरीकों में परिवर्तनीय तर्क (varargs) स्वीकार कर सकता है। के बाद कि चर तर्क स्वीकार करता वर्ग कर्मचारी है, जो एक विधि daysOffWork को परिभाषित करता है का एक उदाहरण है:
class Employee {
public int daysOffWork(int... days) {
int daysOff = 0;
for (int i = 0; i < days.length; i++) {
daysOff += days[i];
}
return daysOff;
}
}
दीर्घवृत्त (...) है कि डेटा प्रकार इस प्रकार है इंगित करता है कि विधि पैरामीटर दिनों एक पारित किया जा सकता सरणी या एकाधिक अल्पविराम से अलग मूल्य।
वैसे, मैंने हॉरिज़ोनल ELLIPSIS चरित्र, '...', यूनिकोड यू +2026 की कोशिश की। जावा 8 में नेटबीन 8 "अवैध चरित्र" की रिपोर्ट करता है। तो जावा varargs ट्रिपल पूर्ण रोक (अवधि), '...' की आवश्यकता है। –