我正在尝试将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<?>>)
什么是正确的实施?如果我误解了任何基本想法或犯了一个愚蠢的错误,请原谅我。
谢谢。
答案 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) {
}