Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这不安全?_Java_Generics - Fatal编程技术网

Java 为什么这不安全?

Java 为什么这不安全?,java,generics,Java,Generics,我有以下实用程序类: public class MyUtils{ public static <T> List<? extends T> getList(Class<T> clazz){ //returning some list } } 公共类MyUtils{ 公共静态列表>值(){ return(ListgetList()返回一个未知的类型的列表。您正在将其强制转换为列表MyClass。getList应该是MyClass

我有以下实用程序类:

public class MyUtils{

    public static <T> List<? extends T> getList(Class<T> clazz){
        //returning some list
    }
}
公共类MyUtils{
公共静态列表>值(){

return(List
getList()
返回一个未知的类型的列表。您正在将其强制转换为
列表
MyClass。getList
应该是
MyClass。value
,对吗?@CoronA当然,我会在一分钟内修复它。啊,我明白了。所以强制转换的安全性本质上取决于
getList(Class clazz)的实现
。我的意思是,如果它是按如下方式实现的
公共静态列表如果是这样的实现,您可以抑制警告,并且在运行时不会出现问题。但这就违背了使用类型安全泛型类型的要点。如果您的方法应该总是返回列表,那么它的返回类型应该是List,而不是List(如果它总是返回)ed
List
,cast
(ListAfaik:通过将MyClass.class作为参数传递,您无法指定列表中MyClass实例的泛型类型。您需要类似Jackson的TypeReference:
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();