मान लीजिए वहाँ निम्नलिखित कोड है:प्रतिबिंब कास्टिंग अपवाद फेंकते समय निहित कास्टिंग कार्य क्यों करता है?
@SuppressWarnings("unchecked")
public static <T> T implicitCaster(Class<T> cls, Object o) {
return (T) o;
}
public static <T> T reflectionCaster(Class<T> cls, Object o) {
return cls.cast(o);
}
निम्न अपवादों के साथ दोनों ही मामलों में की उम्मीद, पुरातन में पाए गए कोड काम करता है:
public static void main(String[] args) {
System.out.println(implicitCaster(int.class, 42));
System.out.println(reflectionCaster(int.class, 42));
}
पहली कॉल काम करता है के रूप में उम्मीद लेकिन दूसरी कॉल java.lang.ClassCastException
फेंकता है।
क्या यह एक कोने का मामला है जिसमें ऑटोबॉक्सिंग को नजरअंदाज कर दिया गया था? या प्रतिबिंब कास्टिंग के इस मामले में ऑटोबॉक्सिंग प्रदान करना असंभव है? या इस विसंगति के कारण कुछ और है?
संपादित करें: इस कोड को बुला काम करता है के रूप में उम्मीद:
public static void main(String[] args) {
System.out.println(implicitCaster(Integer.class, 42));
System.out.println(reflectionCaster(Integer.class, 42));
}
मैंने वहां लिखा है कि कोड प्रत्येक दिए गए वर्ग के लिए प्राइमेटिव के अपवाद के साथ काम करता है; तो एक सामान्य प्रकार के लिए एक वस्तु कास्टिंग संभव है। दूसरी बात आप वस्तुओं को primitives में डाल सकते हैं। – m3th0dman
@ m3th0dman: मैंने यह नहीं कहा कि यह असंभव है। मैंने कहा कि इसका रनटाइम पर कोई प्रभाव नहीं पड़ता है। – SLaks
अब मैं समझता हूं; लेकिन इस तरह का कास्ट विधि का अनुबंध तोड़ नहीं है? तकनीकी रूप से कास्ट संभव है। – m3th0dman