java - Java 集合接口动态调度
问题描述
Collection<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(2);
for (int i = 0; i < 3; i++) {
list.remove(i);
}
System.out.println(list);
}
}
我的问题:为什么列表使用 remove(object o) 而不是 ArrayList.remove (int index)。我想在编译期间,列出实际对象(动态类型)(Arraylist 的方法)而不是超类的方法。
解决方案
这会执行remove(Object)
,因为您的list
变量是 type Collection
,并且Collection
没有指定remove(int index)
方法。
编译器只查看变量 ( Collection
) 的编译时类型,而不是对象 ( ArrayList
) 的运行时类型。
推荐阅读
- memory - 在 Lua 中,垃圾收集器可以确定性管理的对象/表的数量是否有限制?
- python - 将 3 维 Numpy 数组转换为 4 维 Numpy 数组
- javascript - 在由命令的发送者确定的通道中发送消息
- python - 有人可以教我如何使我的代码更好以及如何修复错误和错误吗?
- c - 如何将具有指数和 sin 函数的方程转换为 C?
- python - Python中从一个坐标系到另一个坐标系的图像转换
- laravel-livewire - Livewire AppServiceProvider 启动方法未在更新时执行
- c# - 为什么大数组可以同步到小数组?
- node.js - 来自 MongoDB 的 React Native fetch 不起作用
- python - 在 Python 上堆叠两个图像以获得单个图像