public class Box<T> {
private T element;
public T getElement() {
return element;
}
public void setElement(T element) {
this.element = element;
}
}
public class Test {
public static void main(String[] args) {
List<Box> l = new ArrayList<>(); //Just List of Box with no specific type
Box<String> box1 = new Box<>();
box1.setElement("aa");
Box<Integer> box2 = new Box<>();
box2.setElement(10);
l.add(box1);
l.add(box2);
//Case 1
Box<Integer> b1 = l.get(0);
System.out.println(b1.getElement()); //why no error
//Case 2
Box<String> b2 = l.get(1);
System.out.println(b2.getElement()); //throws ClassCastException
}
}
सूची l
प्रकार Box
का तत्व है। 1 के मामले में, मुझे पहला तत्व Box<Integer>
के रूप में मिलता है और दूसरे मामले में सूची में दूसरा तत्व Box<String>
के रूप में प्राप्त किया जाता है। प्रथम मामले में क्लासकास्ट अपवाद नहीं फेंक दिया गया है।जावा - स्ट्रिंग जेनेरिक प्रकार के रूप में सामान्य वस्तु प्राप्त करने अपवाद फेंकता
मैं b1
और b2
में, डिबग करने की कोशिश की element's
प्रकार String
और Integer
क्रमशः रहे हैं।
क्या यह टाइप एरर से संबंधित है?
मेरा अनुमान है कि 'बी 1' को रनटाइम पर 'बॉक्स ' जैसा माना जाता है लेकिन यह वास्तव में एक अजीब व्यवहार है। –