我有一个奇怪的问题,我真的无法理解。
我用这种方式创建了一个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(...);
我真的不明白这种行为,有没有人可以给我一些提示?您能否也给我一些链接或其他引用资料以了解此问题?
提前致谢
最佳答案
addLast
在 LinkedList
类中声明,但不在 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/