我有这样的代码为什么这个泛型代码没有运行时错误?
ArrayList<Integer>arr = new ArrayList<>();
arr.add(1);
arr.add(2);
List l = arr;
l.add("12");// should't this throw an runtime exception? Point1
l.add("123");
System.out.println(l.size());
ArrayList<String>arr1 =(ArrayList<String>) l;// should't this throw an runtime execptions? Point2
arr1.add("12"); //Point 3
System.out.println(arr1.size());
我与泛型代码尝试,我很惊讶地看到一些结果。我有这个具体的问题。
我有一个integer列表。我将它分配给一个没有任何泛型类型的列表l。然后我将一个字符串添加到该列表中。不应该抛出一个运行时异常?列表仍然是一个整数列表吗?
然后我把l投到串列表中?不应该这也抛出一个运行时异常?我不是有效地将integer的数组列表转换为字符串的字符串列表吗?
而在这种情况下,点3,我将一个字符串添加到arr1,即使它应该是字符串arraylist?
我觉得所有三个被质疑的都是相关的吗?任何人都可以向我解释我做错了什么?
因此预计不会发生运行时异常? – Dude 2014-09-22 16:31:37
正确 - 在同一个集合中存储异构类型是合法的(但通常不鼓励)。为了有用地处理列表,你需要使用'instanceof'或者编码特定元素的类型。 – FatalError 2014-09-22 16:32:09