考慮以下片段:
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發出警告?我認為這應該由編譯器基于相同的理由報告為錯誤。
我不確定是否有任何情況為什么這不會是錯誤而只能作為警告。
uj5u.com熱心網友回復:
剛剛看到這段代碼,它表明了為什么帶有型別引數的非具體化強制轉換只能是警告而不是錯誤:
public static <T> List<T> getAsList(Collection<T> c){
if(c instanceof List<?>){
return (List<T>)c;
}
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356478.html
下一篇:帶有泛型集合的Swift協議
