首页 > 解决方案 > 泛型与继承

问题描述

当我遇到以下问题时,我正在终端中处理一些 Java 代码。让我做个序言。

查看以下代码:

Integer x = new Integer(5);
Number y = x

在这里,我们只是简单地声明一个 Integer 对象,然后使用超类 Number 创建对它的引用。这工作得很好而且很花哨,因为整数是一个数字。

因此,以下代码也应该可以工作似乎很直观:

ArrayList<Integer> x = new ArrayList<>();
x.add(6);
ArrayList<Number> y;
y = x;

但是这段代码给了我们一个错误,指出不兼容的类型:ArrayList<Integer> cannot be converted to ArrayList<Number> y = x;

现在我很困惑。当我理解泛型时,我认为我们正在声明一个 ArrayList x,它被强制Integer在编译时和运行时只保存类的对象。既然Integer是 a Number,那么我们应该能够将所有整数视为数字是有道理的。但是这种想法并不一致:我在这里做错了什么?

标签: javagenerics

解决方案


推荐阅读