這個是 Java 在編譯時的類型擦除導致的類型不安全。Java 的泛型在編譯時會全部被擦除,假設你相關代碼可以編譯通過:List<List> re2 = new ArrayList<ArrayList>();Map<String, List> re3 = new HashMap<String, ArrayList>();// 編譯后List re2 = new ArrayList();Map re3 = new HashMap();以 re2 為例,對于 List<List> 來說,執行 re2.add(new LinkedList<>()) 對于其定義來說是沒有問題的且允許的,但實際上 re2 的實現是 ArrayList<ArrayList>,這樣就會導致出現類型轉換錯誤,因為 LinkedList 是不可以強轉成 ArrayList 的,為了避免發生這種意外情況,Java 在編譯階段直接就不允許這樣的用法。