Java 为什么二维数组列表不能转换为二维列表我的职业转换方法?

Java 为什么二维数组列表不能转换为二维列表我的职业转换方法?,java,inheritance,arraylist,polymorphism,Java,Inheritance,Arraylist,Polymorphism,我有一个方法,它接受2d列表(list)作为参数。当我试图传递一个2d ArrayListArrayList时,编译器说这两个不能转换 public class Test { public static void main(String[] args) { test(new ArrayList<ArrayList<String>>()); } public static void test(List<List<String>>

我有一个方法,它接受2d列表(
list
)作为参数。当我试图传递一个2d ArrayList
ArrayList
时,编译器说这两个不能转换

public class Test
{
  public static void main(String[] args)
  {
    test(new ArrayList<ArrayList<String>>());
  }
  public static void test(List<List<String>> list)
  {
     return;
  }
}
公共类测试
{
公共静态void main(字符串[]args)
{
测试(新ArrayList());
}
公共静态无效试验(列表)
{
返回;
}
}
我认为测试会接受ArrayList,因为ArrayList
是一个
列表。

一个
ArrayList
是一个
列表
,但这并不意味着
列表
是一个
列表。在Java中,泛型是不变的,所以这是不允许的

您可以将
ArrayList
传递给
test
方法。完全匹配泛型类型参数始终有效

test(new ArrayList<List<String>>());
或者,您可以让方法精确匹配参数

public static void test(List<ArrayList<String>> list)
公共静态无效测试(列表)
这两种方法都允许您传入
ArrayList
一个
ArrayList
是一个
列表
,但这并不意味着
列表
是一个
列表
。在Java中,泛型是不变的,所以这是不允许的

您可以将
ArrayList
传递给
test
方法。完全匹配泛型类型参数始终有效

test(new ArrayList<List<String>>());
或者,您可以让方法精确匹配参数

public static void test(List<ArrayList<String>> list)
公共静态无效测试(列表)

这两个选项都允许您传入
ArrayList

您可以将
链接列表
放入
列表
,但相同的
链接列表
无法添加到
ArrayList
。允许您的建议将破坏该类型的安全性。


数组列表
不是
列表
,它不是该类型参数的有效参数。

您可以将
链接列表
放在
列表
中,但不能将相同的
链接列表
添加到
数组列表
。允许您的建议将破坏该类型的安全性。


ArrayList
不是
列表,它不是该类型参数的有效参数。

因此,如果我理解正确,问题在于获得
@fdsa的人是主要问题。请注意,这不仅仅适用于列表。这只是一个直观的例子。这一概念适用于所有泛型。因此,如果我理解正确,问题在于获得
@fdsa的人是主要问题。请注意,这不仅仅适用于列表。这只是一个直观的例子。这一概念适用于所有泛型。