2012-02-19 13 views
5

मैं देख सकता हूँ वहाँ जावा में एक तरीका है जिसके लिए एक निर्दिष्ट प्रकार के तर्कों के किसी भी संख्या को स्वीकार करता है करने के लिए एक तरीका है: http://www.java-tips.org/java-se-tips/java.lang/how-to-pass-unspecified-number-of-arguments-to-a-m.htmlजावा में किसी भी प्रकार के किसी भी प्रकार के तर्कों को स्वीकार करने वाली विधि कैसे बनाएं?

लेकिन वहाँ एक तरीका है जिसके किसी भी प्रकार के तर्कों के किसी भी संख्या को स्वीकार करता है बनाने के लिए एक रास्ता है ?

+1

'(ऑब्जेक्ट ... तर्क)'? –

उत्तर

9

सभी जावा वस्तुओं वस्तु वर्ग का विस्तार।

public void func(Object[] args) { 
} 

या कुछ भी नहीं पारित करने के लिए अगर आप सक्षम होना चाहते हैं:: तो आप कर सकते हैं अपने कार्य एक वस्तु सरणी स्वीकार

public void func(Object... args) { 
} 
5
public void omnivore(Object... args) { 
    // what now? 
} 

जावा में, किसी भी संदर्भ प्रकार (वस्तुओं और सरणियों), कुछ सामान्य प्रकार के लोगों, यहां तक ​​कि वाइल्डकार्ड, प्रकार वस्तु का एक पैरामीटर के लिए पारित किया जा सकता सहित के एक चर। किसी भी आदिम प्रकार का एक चर अपने संबंधित रैपर प्रकार के लिए autoboxed किया जा सकता है, जो एक संदर्भ प्रकार है, और इसलिए ऑब्जेक्ट के रूप में पारित किया जा सकता है। तो, Object... किसी भी चीज़ को स्वीकार करेगा।

3

इस वाक्य रचना का उपयोग करें:

void myMethod(Object... args) { 
    // Here, args is an array of java.lang.Object: 
    // you can take its length, get its elements with [i] operator, 
    // and so on. 
} 
1

निकटतम आप मिल जाएगा someMethod(Object ... args) है।

कड़ाई से, यह सभी तर्क प्रकारों को स्वीकार नहीं करता है। विशेष रूप से, यह आदिम प्रकारों को स्वीकार नहीं करता है: इन जरूरतों को संबंधित रैपर प्रकारों पर बॉक्स किया गया है। आम तौर पर इससे कोई फर्क नहीं पड़ता। लेकिन ऐसा होता है यदि आपको बुलाए गए विधि में आदिम और रैपर प्रकारों के बीच अंतर करने की आवश्यकता है।

+0

आपके उत्तर के लिए धन्यवाद। असल में, मैं आपके सुझाए गए 'कुछ विधि (ऑब्जेक्ट ... तर्क) के साथ प्रयोग कर रहा हूं और ऐसा लगता है कि मूल और वस्तु दोनों प्रकारों को पारित करने में कोई समस्या नहीं है। मैंने इसे एक परीक्षण के रूप में उपयोग किया है और कोई त्रुटि नहीं मिली है: 'कुछ विधि (99, 1.23, "ए स्ट्रिंग", नई स्ट्रिंग ("ए रैपर स्ट्रिंग"), एओब्जेक्ट); लेकिन शायद जावा मेरे लिए प्राइमेटिव्स को लपेट रहा है, जो जानता है :) –

+1

@fleawhale - यह ** ** ** आपके लिए उन्हें लपेट रहा है (autoboxing)। लेकिन मेरा मुद्दा यह है कि बुलाया गया तरीका उन मामलों को अलग नहीं कर सकता जहां कॉलर ने एक आदिम मूल्य प्रदान किया जो उस मामले से ऑटोबॉक्साइड था जहां यह स्पष्ट रूप से रैपर ऑब्जेक्ट की आपूर्ति करता था। –

+0

चीयर्स, अब यह समझ में आता है! –