2012-03-07 18 views
5

मैं प्रतिबिंब का उपयोग कर रहा a class that is dynamically constructed at runtime पर एक विधि कॉल करने की है redundant array creation for calling varargs method के दोषी।कॉल विधि जब तर्क प्रकार वस्तु []

जिस विधि को मैं कॉल कर रहा हूं वह वास्तव में Object[] लेता है, Object ... नहीं, लेकिन शायद वे समकक्ष और अदला-बदले में सोचते हैं, इसलिए मैं आगे बढ़ता हूं।

रनटाइम पर मैं:

java.lang.IllegalArgumentException: wrong number of arguments 

तो ऐसा लगता है कि, शायद, मेरे Object[]Object एस के एक दृश्य के रूप में पारित किया जा रहा है। क्या यह हो रहा है? यदि हां, तो ऐसा करने के लिए मैं इसे कैसे मजबूर कर सकता हूं?

+0

वास्तविक कोड में '...' के स्थान पर आप क्या करते हैं सबसे प्रासंगिक हिस्सा है। क्या आप कृपया अपने असली कोड में क्या दिखा सकते हैं? – dasblinkenlight

+0

बस तार। अपडेट किया गया। – Synesso

+1

जावा में वरर्ग्स सिर्फ वाक्य रचनात्मक चीनी है। कंपाइलर 'ऑब्जेक्ट ...' को 'ऑब्जेक्ट []' में बदल देता है। तो हाँ, वे बराबर हैं। –

उत्तर

5

जिस तरह से आप विधि को बुला रहे हैं, प्रतिबिंब सोचता है कि आप एक एकल सरणी पैरामीटर के बजाय तीन अलग-अलग पैरामीटर पास कर रहे हैं। इस प्रयास करें:

id = (String) m.invoke(adminTask, new Object[]{ new Object[] {"a", "b", "c"} }); 
+0

एएके, मैंने यह कोशिश करने के बारे में सोचा लेकिन ऐसा नहीं किया क्योंकि यह बहुत ही असंभव लग रहा था। धन्यवाद। – Synesso

1

इस प्रयास करें:

Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class); 
id = (String) m.invoke(adminTask, new String[]{ "a", "b", "c" }); 

वापस लाने के हस्ताक्षर public Object invoke(Object obj, *Object... args*) और आइडिया एक निरीक्षण जब एक सरणी से गुजर रहा है जब एक ही प्रकार के एक vararg बजाय उम्मीद है चलाता है कि है।

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