java - 为什么我的 LinkedList 不包含 addLast() 方法?

标签 java oop collections

我有一个奇怪的问题,我真的无法理解。

我用这种方式创建了一个LinkedList:

List<String> customList = new LinkedList<String>();

如果使用 list instanceof LinkedList 检查 customList 的类型,我得到 true,所以 customList 是一个 LinkedList。

现在,如果我尝试在 customList 上执行 addLast() 方法,我会收到 Eclipse 错误:

 The method addLast(String) is undefined for the type List<String>

addList 方法定义在类LinkedList 中但使用此方法的唯一方法是将 customList 声明为 LinkedList 而不是 List,方法如下:

LinkedList<String> customList= new LinkedList<String>();

或者我必须使用强制转换:

((LinkedList<String>) list).addLast(...);

我真的不明白这种行为,有没有人可以给我一些提示?您能否也给我一些链接或其他引用资料以了解此问题?

提前致谢

最佳答案

addLastLinkedList 类中声明,但不在 List 接口(interface)中声明。因此,您只能使用 LinkedList 类型的变量来调用它。但是,对于 List 类型的变量,您可以改为调用 add,因为它将元素添加到 List 的末尾。

当编译器看到 List 变量时,它不知道将分配给该变量的对象的运行时类型。因此它只能让你调用List接口(interface)的方法。例如,您可以为变量分配一个 ArrayList 实例,它没有 addLast 方法,因此它不能让您调用 LinkedList< 的方法 未在 List(或 List 的 super 接口(interface))中声明。

关于java - 为什么我的 LinkedList 不包含 addLast() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31580040/

相关文章:

java - Spring的事件模型

java - 将每行逗号分隔的文件拆分为数组

csv - 使用node-csv和meteor-file将CSV导入到集合中

java - JSTL - 无法访问存储为 session 变量的对象的属性

java - 其余错误代码/成功代码

javascript为我的游戏OOP创建一个对象

c - 你如何在 C 中实现一个类?

php - PDO:数据库凭证

java - 为什么 Comparable 自然排序需要和 equals 方法保持一致?

java - 如何提取两个有序列表的非交集部分?