首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果Java不支持参数化类型数组,Arrays.asList()如何处理它们呢?

如果Java不支持参数化类型数组,Arrays.asList()如何处理它们呢?
EN

Stack Overflow用户
提问于 2018-10-08 10:33:33
回答 1查看 135关注 0票数 1

假设Arrays.asList方法如下所示:

public static <T> List<T> asList(T... a)

T...实际上等同于T[],但是在Java中不允许使用泛型类型的数组吗?例如:

// Example 1
ArrayList<Integer>[] list = new ArrayList<Integer>[10];  // This is not allowed

// Example 2
List<ArrayList<Integer> > listOfList = Arrays.asList(new ArrayList<Integer>(), new ArrayList<Integer>());  // Allowed?

在示例2中,我传递的两个参数意味着Arrays.asListArrayList<Integer>[]作为参数,这与示例1相矛盾。为什么示例2可以工作,而示例1不能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-08 10:42:54

您可以在Java中声明通用类型数组,这是完全合法的。所以这应该是可行的。

private E[] array;

但是您不能像这样实例化泛型数组,因为数组是实例化的,所有的泛型类型都是作为擦除实现的。因此,这个虚构的E在运行时不可用,您就走运了!

array = new E[10];  // Illegal and gives compiler error.

但是你有一个变通的方法。你能做的只是一个石膏。

array = (E[]) new Object[10];

这样,您就可以在java中创建和实例化一个泛型数组。您可以在可能的最低级别使用@SuppressWarnings("unchecked"),可以在声明的位置消除编译器发出的任何未经检查的警告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52694684

复制
相关文章

相似问题

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