这是一段代码片段:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么可以在参数化列表中插入String类的对象.
似乎我理解为什么代码标记#1和#2失败.
但是,为什么#3和#4工作?据我所知,编译器在类型擦除后添加了适当的强制转换,因此当我调用时list.get(0),此方法应该返回一个先前转换为Integer的Object.那么为什么在运行时没有ClassCastException出现在#3和#4?