我有以下实用程序类:
public class MyUtils{
public static <T> List<? extends T> getList(Class<T> clazz){
//returning some list
}
}
使用该方法的类:
public class MyClass<T>{
public static List<MyClass<?>> values(){
return (List<MyClass<?>>) MyUtils.getList(MyClass.class); //Warning, unchecked cast.
}
}
目前尚不清楚为什么这不安全?该方法的结果不能分配给这样的变量:
List<MyClass<? extends Integer>> lst = MyClass.values(); //compile-error
我们可以分配方法结果的唯一方法是:
List<MyClass<?>> dsss = MyClass.values();
那么,这样的演员会导致什么样的运行时错误呢?
答案 0 :(得分:4)
getList()
会返回未知类型的列表。你将它投射到List<MyClass<?>>
。怎么可能安全?
假设返回的列表是List<MyFirstSubClassOfMyClass>
。在将其转换为List<MyClass<?>>
之后,您将能够将MyClass的实例添加到列表中,尽管该列表应该只包含MyFirstSubClassOfMyClass
的实例。