-1

考虑以下代码段:

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
 }
}
...
}
  • 在这里,instanceof将给出编译错误,因为E在运行时类型未知。
  • 为什么会(List<E>)o发出警告?我认为这应该由编译器基于相同的理由报告为错误。

我不确定是否有任何情况下为什么这不会是错误而只能作为警告。

4

1 回答 1

0

刚刚遇到了这段代码,它暗示了为什么带有类型参数的非具体化强制转换只能是警告而不是错误:

public static <T> List<T> getAsList(Collection<T> c){
        if(c instanceof List<?>){
            return (List<T>)c;
        }
        ...
    }
于 2021-11-05T20:11:44.097 回答