java - 泛型与继承
问题描述
当我遇到以下问题时,我正在终端中处理一些 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
,那么我们应该能够将所有整数视为数字是有道理的。但是这种想法并不一致:我在这里做错了什么?
解决方案
推荐阅读
- spring-boot - 无法将类型“java.lang.String”的属性值转换为属性“date_added”所需的类型“java.util.Date”
- java - 字符串索引超出范围。Java 春季启动
- javascript - P5阵列交集
- tcp - 基于 tshark 间隔的输出中所需的时间戳
- html - 我可以为伪元素添加样式吗?
- c# - 搜索到的数据未加载到 asp.net 表单中的数据网格视图?
- php - 将 Laravel 版本从 7.x 更新到 8.0
- javascript - 使用带有预加载 HTML 的 React
- python-3.x - 为什么递归比python3中的迭代慢?
- jquery - 使用 Jquery UI 排序除前三个单元格外的表行排序