gpt4 book ai didi

java - 为什么这不是安全的?

转载 作者:搜寻专家 更新时间:2023-11-01 02:40:53 25 4
gpt4 key购买 nike

我有以下实用程序类:

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();

那么,这样的转换会导致什么样的运行时错误?

最佳答案

getList()返回一个未知类型的列表。你将它转换为 List<MyClass<?>> .怎么可能安全?

假设返回的列表是 List<MyFirstSubClassOfMyClass> .在你把它转换到 List<MyClass<?>> 之后,您将能够将 MyClass 的实例添加到列表中,尽管该列表应该只包含 MyFirstSubClassOfMyClass 的实例。 .

关于java - 为什么这不是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33460279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com