为什么原始类型转换在Java中不会产生警告?

为什么原始类型转换在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); } }

我希望下面的代码会产生一个rawtype警告,但它不会:

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

由于左侧的
,您没有使用擦除类型,因此演员阵容不必假装对照该擦除类型进行检查。在任何情况下,此行都不会因为未选中的类型信息而在以后导致运行时错误。因此,没有必要发出警告

使用
收集
,当你把东西拿出来时,你会得到一个
对象
。这不会失败(因为您可能得到的一切都是
对象

您不允许将任何内容放入
集合
。所以这也不会导致错误