2012-04-10 8 views
22

मैं जावा संजीदगी से में इस विधि को लागू करने की कोशिश कर रहा हूँ:मैं तर्क के रूप में शून्य के साथ एक विधि को प्रतिबिंबित कैसे करूं?

public void setFoo(ArrayList<String> foo) { this.foo = foo; } 

समस्या यह है कि मैं null के रूप में अशक्त पास करना चाहते हैं, ताकि foo अशक्त हो जाता है।

हालांकि, निम्नलिखित दृष्टिकोण यह मान लिया गया कोई तर्क नहीं है, और मैं IllegalArgumentException (wrong number of arguments) मिलता है कि में:

method.invoke(new FooHolder(), null); 
// -----------------------------^ - I want null to be passed to the method... 

यह कैसे पूरा किया है?

+2

जब 'बुरा बारी varargs'। – biziclop

उत्तर

6

प्रयास करें संकलक चेतावनी आप समस्या से अवगत करना चाहिए;

प्रकार अशक्त का तर्क स्पष्ट रूप से [] वस्तु को डाली जानी चाहिए के लिए प्रकार विधि से varargs वापस लाने (वस्तु, वस्तु ...) के आह्वान। इसे वैकल्पिक रूप से एक varargs आमंत्रण

के लिए ऑब्जेक्ट में डाला जा सकता है आप इसे इस तरह ठीक कर सकते हैं;

Object arg = null; 
method.invoke(new FooHolder(), arg); 
3

पहले से पोस्ट किए गए समाधानों के बारे में कुछ स्पष्टीकरण।

Method.invoke() को एक परिवर्तनीय धैर्य समारोह के रूप में घोषित किया गया है, और इसका मतलब है कि आम तौर पर आपको स्पष्ट रूप से ऑब्जेक्ट सरणी बनाने की आवश्यकता नहीं होती है। केवल इसलिए कि आप एक पैरामीटर पास करते हैं, जिसे ऑब्जेक्ट एरे के रूप में समझा जा सकता है, method.invoke(obj, null) विफल रहता है।

उदाहरण के लिए यदि आपके विधि में दो पैरामीटर थे, method.invoke(obj, null, null) पूरी तरह से ठीक काम करेगा।

लेकिन अगर आपके विधि एक भी Object[] पैरामीटर है, तो आप हमेशा यह रैप करने के लिए किया है।

6

मेरे लिए, यह काम नहीं करता:

m.invoke (c.newInstance(), नई वस्तु [] {अशक्त});

लेकिन यह काम करता है:

m.invoke (c.newInstance(), नई वस्तु [] {});

+2

तो शायद आपके पास कोई तर्क नहीं है –

संबंधित मुद्दे

 संबंधित मुद्दे