2013-03-19 3 views
6

को देखते हुए चर:एक वैरिएटिक विधि कैसे बनाएं एक सरणी को varargs सरणी के पहले मान के रूप में लेते हैं?

Object[] ab = new Object[] { "a", "b" }; 
Object[] cd = new Object[] { "c", "d" }; 

जब निम्न विधि बुला:

public static void m(Object... objects) { 
    System.out.println(Arrays.asList(objects)); 
} 

का उपयोग करना:

[[Ljava.lang.Object;@3e25a5, [Ljava.lang.Object;@19821f] 

:

m(ab, cd); 

मैं उम्मीद आउटपुट प्राप्त लेकिन जब का उपयोग कर:

m(ab); 

मैं:

[a, b] 

strings <- ab के बाद से और नहीं strings[0] <- ab

मैं कैसे बल संकलक strings सरणी के पहले मान के रूप में ab सरणी लेने के लिए कर सकते हैं, और फिर उत्पादन होने:

[Ljava.lang.Object;@3e25a5 

?

+0

'ऑब्जेक्ट []' को स्वीकार करने और इसे 'एम' में पास करने वाला अधिभार यहां एक कामकाज हो सकता है। –

+1

@defaultlocale आप बाइटकोड स्तर पर ऐसे अधिभार का प्रतिनिधित्व नहीं कर सकते हैं क्योंकि इसका परिणाम डुप्लिकेट हस्ताक्षर होगा। –

+0

@MarkoTopolnik इस बात को इंगित करने के लिए धन्यवाद। हाथ से एक कंपाइलर नहीं था, इस प्रकार, एक मूर्ख टिप्पणी। –

उत्तर

9

यह Typecast जबकि गुजर और आप आप क्या चाहते हैं मिलेगा -

m((Object)ab); 
+1

महान, अच्छा सुझाव। – bsiamionau

3
रूप @Sudhansu ने सुझाव दिया से

अलावा। आप चर के रूप में चर को परिभाषित कर सकते हैं ताकि एकल सरणी पास करते समय आपको विधि कॉल में कास्टिंग के साथ परेशान न हो।

Object ab = new Object[] { "a", "b" }; 
Object cd = new Object[] { "c", "d" }; 
संबंधित मुद्दे