2012-02-01 13 views
6

पर नहीं डाला जा सकता है मैं किसी उत्पाद के एपीआई से वेक्टर प्राप्त कर रहा हूं।[java.lang.String; java.lang.String

Vector<?> dataVector = dataAPI.getReturnVector(); 

वेक्टर स्ट्रिंग्स मूल्य के रूप में शामिल होने की अपेक्षा की जाती है। मैं वेक्टर के आकार को 2 के रूप में प्रिंट करने में सक्षम हूं। लेकिन किसी कारण से मैं मूल्यों को फिर से भरने और मुद्रित करने में सक्षम नहीं हूं।

मैंने कोशिश की

Iterator<?> iter = dataVector.iterator(); 

while(iter.hasNext()) { 
    System.out.println(iter.next()); 
} 

मैं हमेशा हो रही अंत एक

[java.lang.String; cannot be cast to java.lang.String 

मैं

iter.next().getClass().getName() 

का इस्तेमाल किया और यह पता चला केवल java.lang.String किया जाना है।

मैं थोड़ा googled और http://prideafrica.blogspot.com/2007/01/javalangclasscastexception.html

मैं String[] के रूप में जेनरिक सेट करने की कोशिश की पर एक ऐसी ही समस्या का पता चला, लेकिन एक ही त्रुटि के साथ समाप्त हो गया।

यदि वेक्टर में java.lang.String है, तो मुझे यह कास्ट अपवाद क्यों मिलता है? मैं वास्तविक मूल्य कैसे मुद्रित कर सकता हूं?

कृपया अपने सुझाव प्रदान करें।

+1

वह अर्धविराम कहां से आया? –

+4

क्या त्रुटि संदेश शायद '[java.lang.String;' जैसे खुले ब्रेस के साथ शुरू हुआ था? यह एक स्ट्रिंग सरणी का आंतरिक नाम होगा। –

+0

ओह हाँ, यह एक खुली ब्रेस के साथ शुरू हुआ [। इसे याद करने के लिए खेद है। मुझे नहीं पता था कि इससे कोई फर्क पड़ता है। – jobinbasani

उत्तर

7

तो एपीआई स्ट्रिंग्स का वेक्टर नहीं लौटा रहा है लेकिन स्ट्रिंग का वेक्टर [] है।

आप प्रत्येक तत्व के लिए, सरणी के माध्यम से लूप करने के लिए वेक्टर के माध्यम से फिर से सक्रिय करने में सक्षम होना चाहिए।

Iterator<String[]> iter = dataVector.iterator(); 

while(iter.hasNext()) { 
    String[] array = iter.next(); 
    for(int i=0; i < array.length; i++) 
    { 
     System.out.println(i + ": " + array[i]); 
    } 
} 
+0

धन्यवाद! यह काम करेगा। मेरे मामले में, जैसा कि आपने कहा था कि वेक्टर स्ट्रिंग [] लौट रहा था। कुछ पुनर्मिलन के लिए, एपीआई विधि स्ट्रिंग सरणी को 'भरने' के रूप में अपेक्षित नहीं था ... – jobinbasani

4

अपने क्लासलोडर्स की तुलना करने का प्रयास करें। यदि वे अलग हैं, तो यह अपवाद होता है।

StringClass1.getClassLoader()==StringClass2.getClassLoader(); 
+0

ऐसा लगता है कि कुछ 'स्ट्रिंग की' स्ट्रिंग' की सरणी डालने का प्रयास कर रहा है। –

1

एक पुनरावर्तक का उपयोग करने की आवश्यकता नहीं है। मूल्यों को मुद्रित करने के लिए आप एस की elementAt(index) विधि का उपयोग कर सकते हैं। Vector के सूचकांक प्राप्त करने के लिए For लूप का उपयोग करें।

उदाहरण:

Vector<?> dataVector = dataAPI.getReturnVector(); 
for(int i = 0; i < dataVector.size(); i++) { 
    System.out.println(dataVector.elementAt(i)); 
} 

आप (संख्या और अक्षरों का) एक अजीब जवाब मिल रहा है, तो आप एक String[] वस्तु हो रही। इसका मतलब है कि String[] सरणी मुद्रित करने के लिए आप Arrays की अंतर्निहित विधि का उपयोग करेंगे। नीचे दी गई टिप्पणियां देखें।

+0

यह प्रिंट करता है [Ljava.lang.String; @ 25a091 [Ljava.lang.String; @ 50a11a – jobinbasani

+0

@whoopy_whale: आप 'System.out.println (Arrays.toString (dataVector.elementAt (i)) कर सकते हैं);'। –

+1

@ βнɛƨнǤʋяʋиɢ Arrays.toString का उपयोग करने के लिए, मुझे जेनेरिक का उपयोग वेक्टर के रूप में करना था और आउटपुट [] [] – jobinbasani

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