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

标签 java generics

为什么下面的代码不起作用?

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

List<List<URL>> announces;
announces = new ArrayList<ArrayList<URL>>();

错误如下:

Type mismatch: cannot convert from ArrayList<ArrayList<URL>> to <List<List<URL>>

最佳答案

因为您的泛型绑定(bind)到一个类型 List<URL> .即只有 List (这是一个接口(interface))被接受。

您可以使用 wildcards 允许任何列表.

List<? extends List<URL>> announces;

你也可以考虑subtyping .示例:

List<List<URL>> announces = new ArrayList<List<URL>>();
announces.add(new ArrayList<URL>());
announces.add(new LinkedList<URL>());

这是有效的,因为通用类型接受 List<URL>ArrayList , LinkedList 是一个 List .

关于java - 为什么不能将 ArrayList 分配给 List 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5230124/

相关文章:

java - 如何找到方法参数的具体类

ios - 使用通用协议(protocol),如何在一个 View Controller 中具有不同的关联值来确认协议(protocol)

c# - 在具有开放泛型类型的 Controller 上创建操作方法

java - 想要在Java中查找子列表的乘积

java ;制作线程之间的区别

java - 为什么 PrintStream "out"和 InputStream "in"为空?

c# - 我怎样才能避免类型转换但传递正确的类型

swift - 在 Swift 中执行映射时跳过项目?

java小程序无法运行

java - ThreadLocal 的使用如何降低可重用性