की सूची में ऑब्जेक्ट की कास्ट सूची मैं प्रतीत होता है कि समान रूप से समान कोड के विभिन्न संकलन परिणाम को समझने की कोशिश कर रहा हूं। ऐसा लगता है कि List<Object>
को List<T>
पर डालना संभव है, लेकिन केवल T
ठोस वर्ग द्वारा बाध्य नहीं है। तो class Test<T extends BigDecimal>
और न ही class Test<T extends BigDecimal & CharSequence>
में class Test<T>
में और साथ ही class Test<T extends CharSequence>
में लेकिन नहीं दिया ...कक्षा 'प्रकार पैरामीटर
List<Object> bis = new ArrayList<>();
निम्नलिखित संकलित करता है।
List<T> result = (List<T>) bis;
तो जहां अंतर T
एक वर्ग के प्रकार और एक अंतरफलक प्रकार से घिरा के लिए से आता है?
संपादित:
अनुरोध के अनुसार कुछ पूरा कोड। यह लाइन 9 में एक कंपाइलर चेतावनी के साथ संकलित करता है। यह वास्तव में result
की वस्तुओं पर परिचालन के रूप में असुरक्षित है जैसे कि CharSequence
के उदाहरण ClassCastException
में परिणाम थे। लाइन 9 में
public class Sandbox<T extends BigDecimal> {
public static void main(String[] args) {
new Sandbox<BigDecimal>().foo();
}
private void foo() {
List<Object> bis = Arrays.asList(Integer.valueOf(1));
List<T> result = (List<T>) bis;
System.out.println(result);
}
}
संकलक त्रुटि:
public class Sandbox<T extends CharSequence> {
public static void main(String[] args) {
new Sandbox<CharSequence>().foo();
}
private void foo() {
List<Object> bis = Arrays.asList(Integer.valueOf(1));
List<T> result = (List<T>) bis;
System.out.println(result);
}
}
हालांकि, इस सब पर संकलित करता है नहीं List<T>
को List<Object>
नहीं दिया जा सकता।
अधिक कोड की आवश्यकता है। क्या आप सटीक रेखाएं दे सकते हैं जो आपके लिए असफल हो रही हैं? – markspace
'सूची ' सूची '' पर 'टी 0' मूल्य को अलग करने के लिए सुरक्षित नहीं है, जहां 'T' 'ऑब्जेक्ट' से भिन्न मूल्य ले सकता है। इंटरफ़ेस प्रकार * बनाम *। कक्षा का कोई फर्क नहीं पड़ता। चाहे कोई भी जावा कंपाइलर समस्या का निदान करता है, एक अलग सवाल है। –
'टी विस्तारित करता है CharSequence' संस्करण संकलित नहीं करता है। https://ideone.com/ySVuPr –