java - 有什么简单的方法可以解释为什么我不能做 List<Animal> animals = new ArrayList<Dog>()?

标签 java generics oop covariance

我知道为什么不应该这样做。但是有没有办法向外行解释为什么这是不可能的。你可以很容易地向外行解释:Animal animal = new Dog();。狗是一种动物,但狗的列表不是动物的列表。

最佳答案

假设您创建了一个列表。然后,您将其声明为 List 并将其交给同事。他,并非没有道理,相信他可以在里面放一只

然后他把它还给你,你现在有一个列表,中间有一只。困惑随之而来。

请务必注意,由于列表的可变性,存在此限制。在 Scala 中(例如),您可以声明 Dogs 列表是 Animals 列表。这是因为 Scala 列表(默认情况下)是不可变的,因此将 Cat 添加到 Dogs 列表中将为您提供 列表strong>动物。

关于java - 有什么简单的方法可以解释为什么我不能做 List<Animal> animals = new ArrayList<Dog>()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346763/

相关文章:

java - 如何消除这个具体例子中的开关

java - @SequenceGenerator 的架构属性在 Hibernate 中不起作用

java - 尝试使用java中的扫描仪读取回车键的敲击作为输入?

java - Java 中的 Throwable 和 Exception

java - 为什么Spring MVC会以404响应并报告“在DispatcherServlet中未找到带有URI […]的HTTP请求的映射”?

generics - 创建新的通用结构的正确方法是什么?

java - 改造自定义回调通用类型

c# - OOP 实现问题

delphi - 字符串记录的 TDictionary 哈希被破坏

c# - 依赖注入(inject)和 AppSettings