2012-07-18 22 views
10

क्यों यह काम ठीक ?:String.Format() एक भी तर्क के रूप में एक सरणी लेता

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, "John", "Connor")); 

और यह does not ?:

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, (Object)new String[]{"John","Connor"})); 

विधि String.Format एक vararg लेता है, तो वस्तु?

यह ठीक से संकलित करता है लेकिन जब मैं इसे निष्पादित करता हूं तो String.format() vararg ऑब्जेक्ट को एक अद्वितीय तर्क (सरणी() सरणी के) स्ट्रिंग() मान के रूप में लेता है), इसलिए यह एक MissingFormatArgumentException फेंकता है क्योंकि यह मेल नहीं खाता दूसरा स्ट्रिंग विनिर्देशक (% s)।

मैं इसे कैसे काम कर सकता हूं? अग्रिम धन्यवाद, किसी भी मदद की सराहना की जाएगी।

+0

सुनिश्चित नहीं किया जा सकता है लेकिन क्या आप ऑब्जेक्ट करने के लिए स्ट्रिंग सरणी कास्टिंग किए बिना जांच सकते हैं? –

उत्तर

4

समस्या यह है कि Object पर कास्ट करने के बाद, संकलक को पता नहीं है कि आप एक सरणी पारित कर रहे हैं। (Object) के बजाय (Object[]) पर दूसरा तर्क डालने का प्रयास करें।

System.out.println(String.format(f, (Object[])new String[]{"John","Connor"})); 

या बस सब पर एक डाली का उपयोग नहीं करते:

System.out.println(String.format(f, new String[]{"John","Connor"})); 

(एक छोटे से अधिक जानकारी के लिए this answer देखें।)

+1

धन्यवाद, यह ऑब्जेक्ट [] कास्ट के साथ काम करता है। एक संकलन चेतावनी से बचने के लिए कलाकार आवश्यक है। एक बार फिर धन्यवाद। – mevqz

+1

@ ड्रगर्ने - कंपाइलर चेतावनी और कलाकार से बचने के लिए, आप 'नया ऑब्जेक्ट [] {"जॉन", "कॉनर"} 'का उपयोग कर सकते हैं। –

12

इस का उपयोग करें: (इस तरह से मैं सिफारिश करेंगे)

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, (Object[])new String[]{"John","Connor"})); 

या

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, new String[]{"John","Connor"})); 

लेकिन यदि आप इस तरह से उपयोग करते हैं, तो आपको निम्न चेतावनी मिल जाएगी: प्रकार स्ट्रिंग [] का तर्क स्पष्ट रूप से ऑब्जेक्ट [] को varargs विधि प्रारूप (स्ट्रिंग, ऑब्जेक्ट ...) के आमंत्रण के लिए डाला जाना चाहिए स्ट्रिंग टाइप करें। इसे वैकल्पिक रूप से ऑब्जेक्ट पर एक varargs Invocation

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