为什么原始类型转换在Java中不会产生警告?
我希望下面的代码会产生一个rawtype警告,但它不会:为什么原始类型转换在Java中不会产生警告?,java,generics,Java,Generics,我希望下面的代码会产生一个rawtype警告,但它不会: public class Test { public void exampleMethod(Object object){ if(object instanceof Collection){ Collection<?> coll = (Collection) object; System.out.println(coll); } }
public class Test {
public void exampleMethod(Object object){
if(object instanceof Collection){
Collection<?> coll = (Collection) object;
System.out.println(coll);
}
}
}
公共类测试{
公共void示例方法(对象){
if(集合的对象实例){
Collection coll=(Collection)对象;
系统输出打印项次(coll);
}
}
}
为什么原始类型转换不生成警告?警告的要点是通知您,编译器或运行时实际上都没有强制执行泛型类型断言,因此您可能会在代码中进一步得到ClassCastException 由于左侧的
?
,您没有使用擦除类型,因此演员阵容不必假装对照该擦除类型进行检查。在任何情况下,此行都不会因为未选中的类型信息而在以后导致运行时错误。因此,没有必要发出警告
使用收集
,当你把东西拿出来时,你会得到一个对象
。这不会失败(因为您可能得到的一切都是对象
)
您不允许将任何内容放入集合
。所以这也不会导致错误