为什么 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
}
}
...
}
- 此处,
instanceof
将给出编译错误,因为 E
的类型在 运行 时未知。
- 为什么
(List<E>)o
会给出警告?我认为这应该被编译器以同样的理由报告为错误。
我不确定是否有任何情况可以说明为什么这不是错误而只是警告。
刚刚看到这段代码,说明为什么 带有类型参数的非具体化转换 只能是警告而不是错误:
public static <T> List<T> getAsList(Collection<T> c){
if(c instanceof List<?>){
return (List<T>)c;
}
...
}
考虑以下片段:
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
会给出警告?我认为这应该被编译器以同样的理由报告为错误。
我不确定是否有任何情况可以说明为什么这不是错误而只是警告。
刚刚看到这段代码,说明为什么 带有类型参数的非具体化转换 只能是警告而不是错误:
public static <T> List<T> getAsList(Collection<T> c){
if(c instanceof List<?>){
return (List<T>)c;
}
...
}