Java:如何将2维ArrayList传递给方法/构造函数

Rez*_*eem 1 java constructor arraylist

我试图将2d ArrayList传递给构造函数.构造函数的标题是这样的:

public Table( ArrayList<ArrayList<?>> table )
{
Run Code Online (Sandbox Code Playgroud)

在此之后,我尝试在main中实现以下代码:

ArrayList<ArrayList<Object>> 2dList = new ArrayList<ArrayList<Object>>(2); 

Table Data1 = new Table( 2dList );
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样的代码时,我收到以下错误:

no suitable contructor found for Table(java.util.ArrayList<java.util.ArrayList<java.lang.Object>>)
    constructor Table.Table(java.util.ArrayList<java.util.ArrayList<?>>) is not applicable
    (argument mismatch; java.util.ArrayList<java.util.ArrayList<java.lang.Object>> cannot be converted to java.util.ArrayList<java.util.ArrayList<?>>)
Run Code Online (Sandbox Code Playgroud)

什么是正确的实施?如果我误解了任何基本想法或犯了一个愚蠢的错误,请原谅我.

谢谢.

rge*_*man 5

一个ArrayList<ArrayList<Object>>不是一个ArrayList<ArrayList<?>>,即使它ArrayList<Object>是一个ArrayList<?>,出于同样的原因,即a List<Dog>不是a List<Animal>,即使a Dog是aAnimal.

要传递ArrayList<ArrayList<Object>>,请在签名中包含另一个通配符:

public Table( ArrayList<? extends ArrayList<?>> table )
Run Code Online (Sandbox Code Playgroud)