假设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.asList
将ArrayList<Integer>[]
作为参数,这与示例1相矛盾。为什么示例2可以工作,而示例1不能?
发布于 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")
,可以在声明的位置消除编译器发出的任何未经检查的警告。
https://stackoverflow.com/questions/52694684
复制相似问题