2012-06-05 20 views
5

मैं जावा भाषा विशिष्टता (जेएलएस) का एक प्रासंगिक भाग ढूंढ रहा हूं जो एक परिवर्तनीय धैर्य (vararg) विधि का आह्वान करते समय व्यवहार का वर्णन करता है।जावा भाषा विशिष्टता का कौन सा हिस्सा छोड़े गए varargs के व्यवहार का वर्णन करता है?

विधि पर विचार करें:

public static void printVarArgs(String... args) { 
    System.out.println(Arrays.toString(args)); 
} 

अगर मैं ऐसा तरह विधि आह्वान:

printVarArgs(); 

उत्पादन तरह दिखेगा: [] क्योंकि कॉल स्थल पर args की चूक में बदल दिया गया printVarArgs विधि में एक खाली सरणी।

मैं जेएलएस के बिंदु की तलाश में हूं जो इस व्यवहार को परिभाषित करता है। मुझे सबसे नज़दीकी पाया गया है 15.12.4.2 Evaluate Arguments, लेकिन यह यह उदाहरण नहीं देता है, और मुझे यकीन नहीं है कि यह मामला वास्तव में औपचारिक/गणितीय विवरण से ढंका हुआ है या नहीं।

जेएलएस का कौन सा हिस्सा एक वैरगा छोड़ा जाने पर खाली सरणी के स्वचालित निर्माण का वर्णन करता है?

उत्तर

4

कि JLS खंड के पाठ का कहना है:

विधि लागू की जा रही एक चर arity विधि है (§8.4.1) m, यह जरूरी n > 0 औपचारिक पैरामीटर है। m के अंतिम औपचारिक पैरामीटर में के लिए आवश्यक T[] है, और एम को k >= 0 वास्तविक तर्क अभिव्यक्तियों के साथ आवश्यक रूप से लागू किया जा रहा है।

मीटर के.एन. वास्तविक तर्क भाव के साथ आमंत्रण तो किया जा रहा है, या, यदि मीटर k != n वास्तविक तर्क भाव और kth तर्क अभिव्यक्ति के प्रकार के साथ लागू किया जा रहा है T[] के साथ संगत काम नहीं है, तो तर्क सूची (e1, ... , en-1, en, ...ek) के रूप में मूल्यांकन किया जाता है अगर इसे (e1, ..., en-1, new T[]{en, ..., ek}) के रूप में लिखा गया था।

मामले के बारे में आप बात कर रहे हैं, वहाँ k == n - 1 औपचारिक तर्क हैं, तो en, ..., ek एक खाली अनुक्रम है, और इसका मतलब है कि जैसे कि वह (e1, ..., en-1, new T[]{}) था तर्क मूल्यांकन किया जाता है।

दूसरे शब्दों में, व्यवहार उस अनुभाग में निर्दिष्ट है जिसे आप देख रहे थे।

5

JLS 15.12.4.2 से:

मीटर के अंतिम औपचारिक पैरामीटर जरूरी टाइप टी [] कुछ टी के लिए, और मीटर जरूरी कश्मीर> = 0 वास्तविक तर्क भाव के साथ आमंत्रण को किया जा रहा है है।

यह कैली परिप्रेक्ष्य से है। मुझे यकीन नहीं है कि यह कॉलर के परिप्रेक्ष्य से आपके द्वारा उद्धृत व्यवहार कहां से कहता है, लेकिन यह एक तरह का अंतर्निहित है।

+0

हाय, आपके उत्तर के लिए धन्यवाद। मैंने +1 किया, लेकिन मैंने दूसरे जवाब को स्वीकार कर लिया क्योंकि मुझे थोड़ा और व्याख्यात्मक लगता है। – Grundlefleck