为什么我无法访问oracle文档中指定的LinkedLists的某些方法?

时间:2017-03-14 23:07:36

标签: java

List<Student> studentQueue = new LinkedList<>();

public void add(Student s){
    studenQueue.add(s);
    studentQueue.peek(); //Here i'm not getting a peek method as listed in the java API

}

正如您所看到的peek方法,它被定义为oracle网站上指定的Java API中的有效方法。但是当我尝试在实践中使用该方法时,我的IDE无法找到该方法。

3 个答案:

答案 0 :(得分:2)

studentQueue的类型为List<Student>, 并且List界面没有peek方法。 如果您需要访问LinkedList的方法,请将其类型声明为:

LinkedList<Student> studentQueue = new LinkedList<>();

为了记录,在实践中,您需要依赖特定实现的方法是很少见的。更高级别的设计可能更依赖于更一般的List<T>界面(甚至Collection<T>Iterable<T>),这更为常见。然后,您声明程序其余部分所需的最通用接口,例如List,并选择适当的实现,例如LinkedListArrayList

简而言之,如果studentQueue的用户确实需要LinkedList的方法,则声明为LinkedList,否则请坚持更通用的接口List

答案 1 :(得分:1)

可用的方法基于变量的声明类型(在您的情况下为List)。

要使用peek方法访问,您必须将变量的类型更改为LinkedList

答案 2 :(得分:1)

它不起作用,因为您的引用变量是List类型。如果您看到List Interface的文档,您会发现没有peek()方法。

如果将引用变量的类型更改为LinkedList,它将起作用。