我原以为下面的代码会产生 rawtype 警告,但它没有:
public class Test {
public void exampleMethod(Object object){
if(object instanceof Collection){
Collection<?> coll = (Collection) object;
System.out.println(coll);
}
}
}
为什么原始类型转换不生成警告?
最佳答案
警告的目的是通知您泛型类型断言实际上并未由编译器或运行时强制执行,因此您可能会在代码中进一步得到 ClassCastExceptions。
因为 ?
在左侧,您没有使用已删除的类型,因此 Actor 不必假装检查已删除的类型。由于未检查类型信息,此行不会在以后导致运行时错误。因此无需警告。
与 Collection<?>
,当你把东西拿出来时,你会得到一个 Object
.那不会失败(因为您可能得到的所有东西都是 Object
)。
并且您不能将任何内容放入 Collection<?>
中.这样也不会导致错误。
关于java - 为什么原始类型转换不会在 Java 中产生警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883008/