gpt4 book ai didi

Java限制类数组类型

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:10 24 4
gpt4 key购买 nike

我创建了一个像这样的数组:

    Class<? extends AbstractItem>[] itemList = {
ItemNew.class,
ItemLoad.class,
ItemSave.class,
ItemSetting.class,
ItemEnd.class
};

但是java告诉我:

Cannot create a generic array of Class<? extends AbstractItem>  

如果我不指定类泛型 java警告我:

Class is a raw type. References to generic type Class<T> should be parameterized    

那么谁是对的呢?甚至更多为什么它不允许我限制类类型?

编辑:提到的重复项不能解决我的问题,因为如果我不指定数组的类型,我可以在编译器警告的情况下创建它。所以这确实是可能的,但我正在寻找实现这一目标的正确方法)

最佳答案

Java 不允许创建泛型数组,除非所有类型参数都是无界通配符。

考虑以下代码:

    List<String>[] strings=new List<String>[1];    //1
List<Integer> integers=Arrays.asList(1);
Object[] objects=strings;
objects[0]=integers;
String s=strings[0].get(0);
System.out.println(s); //2

参见语句1,如果java允许创建泛型类型数组,则上面的代码将得到异常 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String on 语句 2 在运行时没有任何警告。这是不正确的,因此 java 不能创建泛型类型数组。

如果你改变List<String>[] stringList=new List<String>[1]; //1List<String>[] stringList=new List[1]; ,代码可以正确编译,但编译器会收到类似 Unchecked assignment 的警告当然,您可以使用@SuppressWarnings("unchecked")抑制警告。

JLS 10.6数组初始化部分,有一个规则:

It is a compile-time error if the component type of the array being initialized is not reifiable

JLS 4.7可具体化的类型定义了什么是reifiable types ,第一个是:

It refers to a non-generic class or interface type declaration.

关于Java限制类数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45530451/

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