Java 为什么二维数组列表不能转换为二维列表我的职业转换方法?
我有一个方法,它接受2d列表(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>>
list
)作为参数。当我试图传递一个2d ArrayListArrayList
时,编译器说这两个不能转换
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的人是主要问题。请注意,这不仅仅适用于列表。这只是一个直观的例子。这一概念适用于所有泛型。