簡體   English   中英

為什么是 ArrayList<T> 可以分配給 ArrayList<Integer>

[英]Why ArrayList<T> can assign to ArrayList<Integer>

public class Demo {
    public static void main(String[] args) {
        ArrayList<Integer> list = getList();
        System.out.println(list.toString());
        list.add(1);
        System.out.println(list.toString());
    }

    public static <T> ArrayList<T> getList(){
        ArrayList<String> strings =  new ArrayList<>();
        strings.add("qwert");
        return (ArrayList<T>) strings;
    }
}

如上所示的代碼為什么允許分配給 ArrayList JDK11 輸出

[qwert]
1

為什么ArrayList<T>可以賦值給ArrayList<Integer>

這是因為您提供了顯式類型轉換。

可能您無法理解的是ArrayList<Integer> list如何容納qwert 同樣,這是因為您已要求編譯器信任您,因此您將Integer放入其中。

最終,當涉及到運行時,所有類型信息都會被刪除。 您需要了解類型擦除的概念。

return (ArrayList<T>) strings;

這里,String ArrayList 沒有直接轉換為Integer ArrayList,而是轉換為T ArrayList。 根據文檔中的“目標類型推斷”:

static <T> List<T> emptyList();
List<String> listOne = Collections.emptyList();

該語句需要一個 List 實例; 此數據類型是目標類型。 因為方法 emptyList 返回一個 List 類型的值,編譯器推斷類型參數 T 必須是值 String。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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