मैं आज बहुत ही बुनियादी लेकिन बेहद परेशान हो गया। मुझे एक सूची को एक सरणी में बदलने की जरूरत है। सूची में String
उदाहरण शामिल थे। List.toArray(T[])
का उपयोग करने का सही उदाहरण, क्योंकि मैं String[]
उदाहरण चाहता था। हालांकि, यह परिणाम String[]
पर स्पष्ट रूप से कास्टिंग किए बिना काम नहीं करेगा।List.toArray (टी []) के विषम जेनेरिक व्यवहार
import java.util.Arrays;
import java.util.List;
public class MainClass {
public static void main(String args[]) {
List l = Arrays.asList("a", "b", "c");
String stuff[] = l.toArray(new String[0]);
System.err.println(Arrays.asList(stuff));
}
}
जो संकलन नहीं करता है:
एक परीक्षण परिदृश्य के रूप में, मैं निम्नलिखित कोड का इस्तेमाल किया। मैं String[]
करने के लिए एक डाली यह संकलन और पूरी तरह से चलेंगे जोड़ देते हैं तो
MainClass.java:7: incompatible types
found : java.lang.Object[]
required: java.lang.String[]
String stuff[] = l.toArray(new String[0]);
^
: यह लगभग javadoc में उदाहरण के एक सटीक प्रतिलिपि है, अभी तक संकलक निम्नलिखित कहते हैं। लेकिन उस नहीं है मैं क्या उम्मीद है जब मैं toArray विधि के हस्ताक्षर को देखा:
<T> T[] toArray(T[] a)
यह मुझसे कहता है मैं कास्ट करने के लिए नहीं होना चाहिए कि। क्या हो रहा है?
संपादित करें:
मजे की बात है, अगर मैं करने के लिए सूची घोषणा बदलने के लिए:
List<?> l = Arrays.asList("a", "b", "c");
यह भी काम करता है। या List<Object>
। इसलिए सुझाव दिया गया था कि यह List<String>
होना आवश्यक नहीं है। मुझे लगता है कि कच्चे List
प्रकार का उपयोग करके यह भी बदलता है कि उस वर्ग के अंदर सामान्य तरीके कैसे काम करती हैं।
दूसरा संपादन:
मुझे लगता है कि मुझे अब यह मिल गया है। नीचे टिप्पणी में टॉम Hawtin क्या लिखा सबसे अच्छा स्पष्टीकरण लगता है। यदि आप कच्चे तरीके से सामान्य प्रकार का उपयोग करते हैं, तो उस उदाहरण से सभी जेनेरिक जानकारी संकलक द्वारा मिटा दी जाएगी। आप सुरक्षा लिख सकते हैं इस मामले में
List<String> l = Arrays.asList("a", "b", "c");
:
String[] a = l.toArray(new String[0]);
किसी भी डाली बिना
के बारे में और पढ़ें यह मुझे तर्कसंगत रूप से समझता है, लेकिन तकनीकी रूप से नहीं। यह मुझे नहीं देखता है कि toArray विधि परवाह करता है कि ई किसके लिए बाध्य है (यानी, सूची का तत्व वर्ग)। – waxwing
toArray का हस्ताक्षर "सार्वजनिक टी [] toArray (टी [] ए)", टी –
dfa
में पारित सरणी का घटक प्रकार है, मैं इसे भी समझ नहीं पा रहा हूं, इससे भी बदतर यह है कि यह एक सूची