为什么可以从Java中的参数化列表中取回“不正确类型”的对象?
下面是一个代码片段:
import java.util.*;
class Test
{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
addToList(list);
Integer i = list.get(0); //#1 fails at run-time
String s = list.get(0); //#2 fails at compile-time
list.get(0); //#3 works fine
System.out.println(list.get(0)); //#4 works fine, prints "string"
}
static void addToList(List list){
list.add("string");
}
}
我理解为什么可以在参数化列表中插入 String 类的对象。
似乎我理解为什么代码标记为和失败。#1
#2
但是,为什么要这样做和工作呢?据我所知,编译器在类型擦除后添加了适当的强制转换,因此当我调用时,此方法应返回先前强制转换为整数的对象。那么,为什么在运行时#3和#4没有ClassCastException发生呢?#3
#4
list.get(0)