java - 列表和列表有什么区别> 和列表>
问题描述
两者似乎给出了相同的结果。我错过了什么?谢谢。
List<List<?>>
<==> List<List<? extends Object>>
<==> List<List<Number>> **(for example)**
List<? extends List<?>>
<==> List<? extends List<? extends Object>>
<==> List<? extends List<Number>> **(for example)**
<==> List<List<Number>> **(List<Number> is a subtype of ? extends List<Number>**
解决方案
在第一种情况下,您有一个列表的列表。
在第二种情况下,您有一个扩展了某物列表的某物列表。
在您的示例中,代码的第二部分有效,因为实际上 aList<number>
以它自己的方式 extends List<?>
。您可以阅读有关多态性的更多信息以了解原因。
贝娄是一个关于你可以用它做什么的例子。
class MyList<T> extends List<T> {}
List<List<?>> someVariable = Arrays.asList(new MyList(), new MyList()); // won't work.
List<? extends List<?>> someOtherVariable = Arrays.asList(new MyList(), new MyList()); // will work.
这是一个非常基本的示例,但它显示了两者之间的区别。
推荐阅读
- mysql - 我是否需要在“IN (SELECT MAX(id)”子查询中重复 WHERE 子句?
- azure - 从 USQL 中的元数据动态生成提取脚本
- r - 如何在 R 的 FTP 服务器上连接到 SQLite?
- postgresql - 使用两个不同键的条件 JOIN
- python - 无法导入 ChaCha20
- python - QGraphicsEllipseItem 绘制事件被裁剪
- azure-devops - VSTS(Azure DevOps)板中的“错误由任务管理”选项不起作用?
- c - 使用选择的多客户端单服务器
- python - 'Client' 对象没有属性 'send_message'
- scala - IntelliJ IDEA Scala 检查:import play.api.xxx 与 com.company.play 包冲突