/*1.*/ List l = new ArrayList<Number>();
/*2.*/ List<String> ls = l; // unchecked warning
/*3.*/ l.add(0, new Integer(42)); // another unchecked warning
/*4.*/ String s = ls.get(0);
如果线2和3产生未检查的警告,那么为什么不四号线产生一个未经检查的警告,因为编译器不知道什么是“LS”是指(List<String>
或List<Integer>
)。为什么第4行不生成未经检查的异常?
(注:从OP的原帖编辑来作出推测预期的代码显示 - 特别是包括List<E>
类型参数无处不在)
但是列表将在类型擦除期间创建List。但编译器如何知道? –
Rekha
但是在列表擦除过程中将列出列表。但是编译器如何知道? –
Rekha
由于类型删除在编译期间发生,即编译器在删除之前检查签名。 – meriton