में App इंजन डॉक्स , दीर्घवृत्त (क्या है JID...
) इस विधि हस्ताक्षर में के लिए?
public MessageBuilder withRecipientJids(JID... recipientJids)
उन तीन डॉट्स का क्या कार्य है?
में App इंजन डॉक्स , दीर्घवृत्त (क्या है JID...
) इस विधि हस्ताक्षर में के लिए?
public MessageBuilder withRecipientJids(JID... recipientJids)
उन तीन डॉट्स का क्या कार्य है?
जवाबों:
वे Java वैरग हैं। वे आपको किसी विशिष्ट प्रकार की किसी भी संख्या को पास करने देते हैं (इस मामले में वे टाइप JID के हैं)।
आपके उदाहरण में, निम्न फ़ंक्शन कॉल मान्य होंगे:
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/larargs.html
विधि के अंदर दीर्घवृत्त या varargs का उपयोग करने का तरीका ऐसा है जैसे यह एक सरणी हो:
public void PrintWithEllipsis(String...setOfStrings) {
for (String s : setOfStrings)
System.out.println(s);
}
इस विधि को निम्नलिखित कहा जा सकता है:
obj.PrintWithEllipsis(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"
अंदर PrintWithEllipsis
, setOfStrings
स्ट्रिंग का एक प्रकार है। तो आप संकलक को कुछ काम बचा सकते हैं और एक सरणी दे सकते हैं:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
के लिए varargs तरीकों, एक दृश्य पैरामीटर एक ही प्रकार की एक सरणी होने के रूप में व्यवहार किया जाता है। इसलिए यदि दो हस्ताक्षर केवल उसी में भिन्न होते हैं, जैसे एक क्रम और दूसरा एक सरणी घोषित करता है, जैसा कि इस उदाहरण में है
void process(String[] s){}
void process(String...s){}
तब एक संकलन-समय त्रुटि उत्पन्न होती है।
स्रोत: जावा प्रोग्रामिंग लैंग्वेज स्पेसिफिकेशन, जहां तकनीकी शब्द variable arity parameter
सामान्य शब्द के बजाय है varargs
।
तीन बिंदु (...) संकेतन वास्तव में गणित से उधार लिया गया है, और इसका अर्थ है "... और इसी तरह"।
जावा में इसके उपयोग के लिए varargs
, इसका अर्थ है, विधि कॉल में किसी भी तर्क को जोड़ा जा सकता है। केवल सीमाएं हैं कि varargs
विधि हस्ताक्षर के अंत में होनी चाहिए और प्रति विधि केवल एक ही हो सकती है।
वे varargs
एक विधि बनाने के लिए उपयोग किए जाते हैं जो किसी भी तर्क को प्राप्त करते हैं।
उदाहरण के लिए PrintStream.printf विधि इसका उपयोग करती है, क्योंकि आप नहीं जानते कि आप कितने तर्क का उपयोग करेंगे।
उनका उपयोग केवल तर्कों की अंतिम स्थिति के रूप में किया जा सकता है।
varargs
जावा 1.5 पर जोड़ा गया था
इसका अर्थ है कि विधि प्रकार के तर्कों ("varargs") की एक चर संख्या को स्वीकार करती है JID
। विधि के भीतर, recipientJids
प्रस्तुत किया गया है।
यह उन मामलों के लिए आसान है जहां आपके पास एक विधि है जो वैकल्पिक रूप से एक तर्क को एक प्राकृतिक तरीके से संभाल सकती है, और आपको कॉल लिखने की अनुमति देती है जो एक ही विधि से एक, दो या तीन मापदंडों को पारित कर सकती है, बिना बनाने की कुरूपता के। मक्खी पर एक सरणी।
यह sprintf
सी से जैसे मुहावरों को भी सक्षम बनाता है; String.format()
उदाहरण के लिए देखें ।
…
, यूनिकोड U + 2026 की कोशिश की। जावा 8 में NetBeans 8 "अवैध चरित्र" की रिपोर्ट करता है। तो जावा varargs को ट्रिपल फुल स्टॉप (अवधि) की आवश्यकता होती है...
।