private void readList(ArrayList list){
list.add("Hello");
list.add(2);
}
public void run(){
setFont("Courier-24");
ArrayList<Integer> list = new ArrayList<Integer>();
readList(list);
println("list = "+list);
println("Type of list[1] = "+list.get(1).getClass());
}
结果:
list = [Hello, 2]
Type of list[1]=class java.lang.Integer
public void run(){
setFont("Courier-24");
ArrayList<Integer> list = new ArrayList<Integer>();
readList(list);
println("list = "+list);
println("Type of list[0] = "+list.get(0).getClass());
}
结果:
list = [Hello, 2]
线程“Thread-2”中的异常 java.lang.ClassCastException:
java.lang.String 无法转换为 java.lang.Integer
在阅读了一些关于的内容之后type erasure
,我有了我的猜测:
当我调用 时readList(list)
,它实际上是将被“错误”视为类型的东西添加到列表中,ArrayList
因此没有错误(这是我对所谓的理解type erasure
)。但是,如果我调用println("Type of list = "+list.get(0).getClass());
,run()
就会出现错误,因为list[0]
它是 type String
(而println("Type of list = "+list.get(1).getClass());
不是因为 list[1] 是 type Integer
)。
是不是像一个罪犯一开始从犯罪现场逃出来(因为他属于正常人,正常人有自由),后来当警察开始检查周围的每个人时,他就因为他是深渊的罪犯而被抓住了?