簡體   English   中英

為什么不能將2d ArrayList轉換為方法調用轉換的2d List?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM