[英]Why can a 2d ArrayList not be converted to a 2d List my method innvocation conversion?
我有一個方法可以接受二維列表( List<List<String>>
)作為參數。 我在嘗試將2D ArrayList傳遞給ArrayList<ArrayList<String>>
,編譯器說這兩個不能轉換嗎?
public class Test
{
public static void main(String[] args)
{
test(new ArrayList<ArrayList<String>>());
}
public static void test(List<List<String>> list)
{
return;
}
}
我認為該測試將接受ArrayList,因為ArrayList is-a
列表。
ArrayList<String>
是List<String>
,但這並不意味着List<ArrayList<String>>
是List<List<String>>
。 在Java中,泛型是不變的,因此這是不允許的。
您可以將ArrayList<List<String>>
傳遞給test
方法。 完全匹配泛型類型參數將始終有效。
test(new ArrayList<List<String>>());
或者,使它起作用的另一種方法是讓test
方法中的list
參數具有通配符:
public static void test(List<? extends List<String>> list)
或者您可以讓方法與參數完全匹配。
public static void test(List<ArrayList<String>> list)
這兩個都將允許您傳遞ArrayList<ArrayList<String>>
。
您可以將LinkedList<String>
放入List<List<String>>
,但不能將相同的LinkedList<String>
添加到ArrayList<ArrayList<String>>
。 允許您的建議將破壞該類型的安全性。
ArrayList<ArrayList<String>>
不是List<List<String>>
,它不是該類型參數的有效參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.