我正在尝试将 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<?>>)
正确的实现方式是什么?如果我误解了任何基本想法或犯了一个愚蠢的错误,请原谅我。
谢谢。
ArrayList<Object>
是ArrayList<?>
,ArrayList<ArrayList<Object>>
也不是ArrayList<ArrayList<?>>
,原因与List<Dog>
不是List<Animal>
相同,即使Dog
是Animal
。
要传递ArrayList<ArrayList<Object>>
,请在签名中包含另一个通配符:
public Table( ArrayList<? extends ArrayList<?>> table )
变量名不能以数字开头! 2dList
应该是list2D
或类似的东西
也像这样声明你的构造函数
public Table(ArrayList<? extends ArrayList<?>> list2D) {
}
或者像这样
public <E> Table(ArrayList<ArrayList<E>> list2D) {
}