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

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

List 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 Found: List listOfObjectArrays = Arrays.asList(new Object[] {1, "two", null}); // compile error: Incompatible types. Required: List Found: List 

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

我已经在另一个问题上看到过Jon Skeet的答案 ,但最后一个例子对我来说并不起作用。 即使我在标有*的行中向ObjectObject[]添加一个强制转换,我也会遇到编译错误。

您可以通过显式指定type参数来告诉Java您想要一个Object[]列表:

 Object[] objectArray = { 1, "two", null }; List listOfObjectArrays = Arrays.asList(objectArray); 
 List 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 list = new List<>(); for (Object obj : objectArray) { list.add(obj); } 

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

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

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

看看Arrays.asList()源代码,很明显我的调用( listOfObjectArrays = Arrays.asList(objectArray); )会产生一个由objectArray本身支持的List,从而创建一个ArrayList 。 所以为了得到一个Object[]数组列表,我需要传递一个Object[]数组的数组(如Kevin建议的那样),或者显式地将Arrays的类型参数设置为Object[] ,强制Arrays.asList()将参数解释为由Object[]项组成的数组(根据Keppil)。