在Java </v>中将Object []转换为ArrayList <v> []

时间:2014-07-08 14:04:38

标签: java object arraylist

以下代码抛出ClassCastException:

ArrayList<V>[] table = (ArrayList<V>[]) new Object[tableSize];

如果这不起作用,我怎样才能创建一个ArrayList数组?

编辑:

为了保持清醒,每个人都明白这个问题。我需要一个包含多个ArrayLists的数组。

EDIT2:

tableSize是一个int。

3 个答案:

答案 0 :(得分:-1)

编辑:好的,这是你可以做的:

ArrayList<String>[] table = new ArrayList[tableSize];

它编译并使用Java 8我正在使用。

答案 1 :(得分:-1)

对于Java,您无法创建类型为通用的数组的新实例。

T[] array = new T[size]; - 导致编译错误Cannot create a generic array of T

当您尝试使用它时会出现同样的错误

ArrayList<T>[] array = new ArrayList<T>[size];

出于同样的原因。编译后,Java运行时不知道T是什么,因为它无法分配有效的内存空间。

要传递此问题,您有以下选项:

  • 删除泛型类型并使用raw。

ArrayList[] array =new ArrayList[size];

  • 使用列表清单

List<List<T>> list = new ArrayList<List<T>>();

答案 2 :(得分:-1)

不是最顺利的方法但是如果我正确地得到了你的问题,这样的事情应该可以解决问题:

int tableSize = 2;
Collection<String> listWithItems = new ArrayList<>();
listWithItems.add("Foo");
listWithItems.add("Bar");    

Collection<Collection<String>> listOfList = new ArrayList<>();
listOfList.add(listWithItems);    

Object[] array = listOfList.toArray(new Object[tableSize]);    

System.out.println("Col: " + listOfList);
System.out.println("Array: " + Arrays.toString(array));

打印出来是:

Col: [[Foo, Bar]]
Array: [[Foo, Bar], null]

简短的例子没有额外的“绒毛”来获得初始数组:

Object[] theArrayOfLists = new ArrayList<List<SomeClass>>().toArray(new Object[tableSize]);