首页 > 解决方案 > 声明了一个 List,实现为 LinkedList,不能使用 getLast() 方法

问题描述

我试图创建一个如下所示的链表

List<Integer> list = new LinkedList<>();
int i = list.getLast();

但是当我使用 LinkedList 类的 getLast() 方法时,它报告“找不到符号”方法 getLast()“”。

看来,由于 getLast() 仅存在于 LinkedList 类中,并且我将 list 声明为 List,因此我将其转换为更通用的形式并丢失了一些功能。

但是我很好奇Java是如何找到方法名的?由于我将它实例化为LinkedList,它不能在实例化类中找到这个方法吗?有没有我可以阅读的文件

标签: casting

解决方案


问题是List接口没有公开getLast()方法,这是特定于实现的LinkedList。您在这里有几个选择。如果你想声明你List的,那么你可以在调用之前转换链表变量getLast()

List<Integer> list = new LinkedList<>();
list.add(1);
int i = ((LinkedList<Integer>)list).getLast();  // but make sure it's a linked list

另一种选择是将您的列表声明为链表:

LinkedList<Integer> list = new LinkedList<>();

推荐阅读