为什么 Java 中 (cast) 运算符的可变参数化变体被标记为未经检查的警告而不是错误?

Why Variable-Parameterized variant of (cast) operator in Java is flagged as unchecked warning and not error?

考虑以下片段:

class MyClass<E>{
...
public void checkType(Object o){
 if(o instanceof List<E>){ //this gives compilation error
   List<E> list = (List<E>)o; //this gives unchecked warning
 }
}
...
}

我不确定是否有任何情况可以说明为什么这不是错误而只是警告。

刚刚看到这段代码,说明为什么 带有类型参数的非具体化转换 只能是警告而不是错误:

public static <T> List<T> getAsList(Collection<T> c){
        if(c instanceof List<?>){
            return (List<T>)c;
        }
        ...
    }