如何创建只有一个数组的Object数组列表?

时间:2015-09-11 11:21:59

标签: java collections

我有以下代码片段,我无法理解为什么不起作用:

List<Object[]> listOfObjectArrays;
listOfObjectArrays = new ArrayList<>();
Object[] objectArray = new Object[] {1, "two", null};
listOfObjectArrays.add(objectArray);
// works just fine

listOfObjectArrays = Arrays.asList(objectArray, objectArray);
// works just fine

listOfObjectArrays = Arrays.asList(objectArray); // *
// compile error: Incompatible types. Required: List<java.lang.Object[]> Found: List<java.lang.Object>

listOfObjectArrays = Arrays.asList(new Object[] {1, "two", null});
// compile error: Incompatible types. Required: List<java.lang.Object[]> Found: List<java.lang.Object>

有人可以指出我正确的方向吗?

我已经在另一个问题上看到了Jon Skeet's answer,但最后一个例子对我不起作用。即使我在标有Object的行中向Object[]*添加了强制转换,也会出现编译错误。

3 个答案:

答案 0 :(得分:2)

通过明确指定type参数,您始终可以告诉Java您需要Object[]列表:

Object[] objectArray = { 1, "two", null };
List<Object[]> listOfObjectArrays = Arrays.<Object[]>asList(objectArray);

答案 1 :(得分:1)

List<Object[]> listOfObjectArrays;
listOfObjectArrays = new ArrayList<>();
Object[][] objectArray = new Object[][] {{1, "two", null}};
listOfObjectArrays.add(objectArray[0]);
// works just fine

listOfObjectArrays = Arrays.asList(objectArray);
// works just fine

你需要这样做。你的列表包含Object [],当你执行Arrays.asList时,它基本上只是迭代数组并将每个索引添加到列表中。 喜欢:

List<T> list = new List<>();
for (Object obj : objectArray) {
     list.add(obj);
}

之后它返回列表。如您所见,它将返回List,但您需要List

答案 2 :(得分:0)

Keppil很好地制定了一条可以解决我当前问题的路线,但是Kevin's answer指出了我正确的方向来理解这种情况。

到目前为止,我使用了Arrays.asList()将数据包装在数组中而不管内容的抽象,然后使用它来创建ArrayList。根据这个模型,我的调用应该导致ArrayList由包含传递的Object[]参数的数组支持。

查看Arrays.asList()来源,很明显我的电话(listOfObjectArrays = Arrays.asList(objectArray);)会产生由objectArray支持的列表,从而创建ArrayList<Object>。因此,为了获得Object[]数组的列表,我需要传递Object[]数组的数组(如Kevin建议的那样),或者将Arrays的类型参数显式设置为{ {1}},强制Object[]将参数解释为由Arrays.asList()项组成的数组(根据Keppil)。

相关问题