为什么我不能将ArrayList分配给List变量?

Geo*_*lly 6 java generics

为什么以下代码不起作用?

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

List<List<URL>> announces;
announces = new ArrayList<ArrayList<URL>>();
Run Code Online (Sandbox Code Playgroud)

错误如下:

Type mismatch: cannot convert from ArrayList<ArrayList<URL>> to <List<List<URL>>
Run Code Online (Sandbox Code Playgroud)

Buh*_*ndi 16

因为Generic 受限于某种类型List<URL>.即只List接受(这是一个接口).

您可以使用通配符来允许任何列表.

List<? extends List<URL>> announces;
Run Code Online (Sandbox Code Playgroud)

您也可以考虑子类型.例:

List<List<URL>> announces = new ArrayList<List<URL>>();
announces.add(new ArrayList<URL>());
announces.add(new LinkedList<URL>());
Run Code Online (Sandbox Code Playgroud)

这是有效的泛型类型接受一个List<URL>ArrayList,LinkedList 是-A List.


Bor*_*vić 3

尝试这个

List<? extends List<URL>> announces = new ArrayList<ArrayList<URL>>();
Run Code Online (Sandbox Code Playgroud)

  • 或者 `List&lt;List&lt;URL&gt;&gt; 宣布 = new ArrayList&lt;List&lt;URL&gt;&gt;()`; (2认同)