2009-06-29 7 views
7
String[] a = c.toArray(new String[0]); 

सबसे पहले: मैं प्रकार यहां डाली की ज़रूरत है? (मुझे लगता है कि हम (String[])c.toArray(); तरह लिखना चाहिए लेकिन मैं प्रकार डाली का उपयोग किए बिना सिर्फ c.toArray() के रूप में यह देखा है इस वैध हैक्या हमें ऑब्जेक्ट के लिए टाइप कास्ट का उपयोग करना चाहिए। ToArray()?

दूसरा:।? इसके अलावा हम क्यों लिख new String[0]

+0

ग के प्रकार पर निर्भर करता है। – gimel

+0

नोट: आप 'c.toArray (नया स्ट्रिंग [] {}) भी उपयोग कर सकते हैं;' –

उत्तर

12

टाइप कास्ट आमतौर पर केवल तभी आवश्यक होता है जब आप प्री-जेनरिक जावा का उपयोग कर रहे हों। । आप डॉक्स को देखने Collection.toArray(T[]) के लिए आप देखेंगे यह जानता है कि कि सरणी जो दिया जाता है के प्रकार के सरणी के प्रकार तो में पारित रूप में ही है, तो आप लिख सकते हैं:

List<String> list = new ArrayList<String>(); 
list.add("Foo"); 
String[] array = list.toArray(new String[0]); 

उत्तीर्ण होने के संग्रह में बताने के लिए सरणी में आप किस परिणाम प्रकार चाहते हैं, जो संग्रह में प्रकार के समान नहीं हो सकता है। जाहिर बाद ही अगर हर तत्व वास्तव में एक ByteArrayOutputStream है काम करने के लिए जा रहा है - उदाहरण के लिए, यदि आप एक List<OutputStream> है आप एक Object[], एक Stream[] या एक ByteArrayOutputStream[] करने के लिए कि कन्वर्ट करने के लिए कर सकते हैं। इसका यह भी अर्थ है कि यदि आपके पास पहले से सही प्रकार और आकार की एक सरणी है, तो सामग्री को एक नई सरणी बनाने के बजाय उसमें कॉपी किया जा सकता है।

इस उत्तर के पिछले संस्करण गलत था, वैसे - अगर आप अधिभार का उपयोग कोई पैरामीटर नहीं ले करता है जो, आप हमेशा वापस पाने के लिए एक Object[] जो ढाला नहीं जा सकता:

List<String> list = new ArrayList<String>(); 
list.add("Foo"); 

// toArray doesn't know the type of array to create 
// due to type erasure 
Object[] array = list.toArray(); 

// This cast will fail at execution time 
String[] stringArray = (String[]) arrray; 

संपादित करें: मैं बस पाया है कि इस भी erdemoo के जवाब में बताया गया है, लेकिन यह इसे यहाँ के लिए चोट नहीं कर सकते हैं भी :)

+0

हम कह सकते हैं कि मैं लिखने नया स्ट्रिंग [0] परिणाम के रूप में अशक्त वापस नहीं लिए ???? – Johanna

+0

(स्पष्ट और सही)। मैं वास्तव में टिप्पणी को समझ नहीं पा रहा हूं हालांकि जोहाना - क्या आप समझा सकते हैं कि आपका क्या मतलब है? –

+0

यह ** सच है कि यदि सरणी के तत्वों के संग्रह से अधिक है, हम ** नई स्ट्रिंग [0] का उपयोग कर सकते है ?? – Johanna

1
  1. हाँ, आप के बाद से खिन्न की ज़रूरत है? टूअरे के रिटर्न प्रकार ऑब्जेक्ट []

  2. आपको पैरामीटर के रूप में (नया स्ट्रिंग [0]) पास करने की आवश्यकता है क्योंकि विधि को यह जानने की आवश्यकता है कि उसे किस तरह की सरणी वापस करनी चाहिए (स्ट्रिंग्स, तिथियों आदि की सरणी) आंतरिक रूप से सभी सूची तत्व वास्तव में ऑब्जेक्ट्स होते हैं ताकि सूची को उन तत्वों के प्रकार के बारे में पता न हो जो इसे पकड़ते हैं आईएनजी और इसलिए यह नहीं जानता कि किस प्रकार की सरणी इसे वापस करनी चाहिए, जब तक कि आप इसे पैरामीटर के रूप में प्रदान न करें।

+1

अच्छा है, लेकिन मुझे लगता है कि हमें यहां उथल-पुथल की जरूरत है !!! – Johanna

4

अगर आप list.toArray() का उपयोग कर रहे हैं, यह आप सरणी वस्तु वापस आ जाएगी । स्ट्रिंग सरणी में कास्टिंग अपवाद फेंक देगा भले ही सूची में संग्रहीत तत्व स्ट्रिंग प्रकार हैं।

अगर आप list.toArray उपयोग कर रहे हैं (वस्तु [] एक), यह सूची में "एक" सरणी में तत्वों का संग्रह किया जायेगा। सूची के अंदर तत्वों स्ट्रिंग रहे हैं और आप स्ट्रिंग सरणी देना है तो यह, स्ट्रिंग सरणी के अंदर तत्वों का संग्रह किया जायेगा अगर दिया सरणी काफी बड़ी सूची के अंदर तत्वों स्टोर करने के लिए नहीं है, तो यह दी गई सूची का विस्तार होगा।

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

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