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

时间:2014-12-16 21:43:03

标签: java arraylist constructor

我正在尝试将2d ArrayList传递给构造函数。构造函数的标题是这样的:

public Table( ArrayList<ArrayList<?>> table )
{

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

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

Table Data1 = new Table( 2dList );

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

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<?>>)

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

谢谢。

2 个答案:

答案 0 :(得分:5)

ArrayList<ArrayList<Object>>不是ArrayList<ArrayList<?>>,即使ArrayList<Object>ArrayList<?>for the same reason that a List<Dog> is not a List<Animal>, even if a Dog is an Animal

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

public Table( ArrayList<? extends ArrayList<?>> table )

答案 1 :(得分:0)

变量名称不能以数字开头! 2dList应为list2D或类似

同样声明你的构造函数

public Table(ArrayList<? extends ArrayList<?>> list2D) {

}

或者像这样

public <E> Table(ArrayList<ArrayList<E>> list2D) {

}