首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效Java:什么是泛型数组创建警告

有效Java:什么是泛型数组创建警告
EN

Stack Overflow用户
提问于 2015-05-13 11:41:31
回答 3查看 1.2K关注 0票数 1

在Java中不允许创建一个泛型类型对象数组。数组没有足够的类型信息来根据运行时的ArrayStoreException和ClassCastException类型来检查它。这就是为什么。然而,第24项的第一段在有效的java中说,

使用泛型进行编程时,将看到许多编译器警告:未经检查的强制转换警告、未检查的方法调用警告、未检查的泛型数组创建警告和未检查的转换警告。使用泛型获得的经验越多,得到的警告就越少,但是不要期望新编写的代码使用泛型来干净地编译。

什么是泛型数组创建警告?如果要创建泛型类型对象数组,则必须获得编译错误。为什么要警告?这应该是个错误。

提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-13 11:58:27

您所指的警告是由于varargs方法中发生的自动数组创建造成的,如下所示:

代码语言:javascript
复制
public void method(List<String>... listArgs) { ... }

如果你打电话:

代码语言:javascript
复制
method(new ArrayList<String>(), new ArrayList<String>());

您将看到警告(我认为,实际的警告文本因Java版本而异):

代码语言:javascript
复制
[unchecked] unchecked generic array creation for varargs parameter of type List<String>[]

Java对varargs方法所做的是创建一个变量参数数组,因此在本例中,它将尝试创建一个List<String>[],它是一个通用数组,因此是警告消息(因为它将被解密为List<?>[])。

票数 0
EN

Stack Overflow用户

发布于 2015-05-13 11:58:27

代码语言:javascript
复制
    //create collection and add some elements
    List<LinkedList<Integer>> myList = new LinkedList<LinkedList<Integer>>();
    myList.add(new LinkedList<Integer>());
    myList.add(new LinkedList<Integer>());

    //now if you want to convert it to array, you have to choose the first option 
    //from below (and get a warning), because the second option is unsupported

    //1. warning
    List[] listArray = myList.toArray(new List[myList.size()]); 

    //2. error
    List<Integer>[] listArray = myList.toArray(new List<Integer>[myList.size()]);

因此,如果您使它成为可能的唯一方式(第一种方式),那么您就必须将其转换回您最初拥有的类型,然后您将得到另一个未检查的强制转换的警告。

票数 0
EN

Stack Overflow用户

发布于 2015-05-13 12:22:22

作者说“未经检查的泛型数组创建警告”。像这样的事情会引起警告,而不是错误:

代码语言:javascript
复制
Stack<Integer>[] stacks = (Stack<Integer>[]) new Object[10]; // warning: unchecked cast
Stack<Integer>[] stacks2 = new Stack[10]; // warning: unchecked assignment

当你说这应该是个错误时,你会想到:

代码语言:javascript
复制
Stack<Integer>[] stacks = new Stack<Integer>[10]; // error: generic array creation
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30213762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档