我在.addFirst方法上遇到错误,为什么?

时间:2014-09-25 14:08:48

标签: java

import javax.swing.*;
import java.util.*;
import java.awt.*;

public class ConverAryToList {

    public static void main(String[] args) { 


        // TODO Auto-generated method stub

        String[] stuff = { "people ", "watermelon ", "melons ", "fudge " };
        List<String> list = new java.util.LinkedList<String>(
                Arrays.asList(stuff)); 


        list.add("pumpkin"); 
        list.addFirst("first"); 

        stuff = list.toArray(new String[list.size()]); 

        for (String x : stuff)
            System.out.printf("%s", x);

    }

}

这是向列表添加元素的简单练习。在 list.addFirst 上,我得到:对于List 类型,未定义方法addFirst(String)。我哪里出错了?

3 个答案:

答案 0 :(得分:2)

您的引用类型是List<T>接口,它不会声明任何addFirst方法。

您可以将参考类型明确设置为LinkedList<String>

LinkedList<String> list = new LinkedList<String>(
                Arrays.asList(stuff)); 

或者你可以施放:

((LinkedList<String>)list).addFirst("first");

首选方法。

投射稍微“危险”,因为它假定您的引用尚未分配新值。

例如,如果您在上述两个语句之间分配了listnew ArrayList<String>();,那么您将在运行时获得ClassCastException

答案 1 :(得分:1)

方法addFirst存在于课程LinkedList上,而不存在于List接口上。

这里:

List<String> list = //whatever

list被视为List,而不是LinkedList

将其更改为:

LinkedList<String> list = //whatever

答案 2 :(得分:0)

LinkedList实现两个接口:ListDeque。 方法addFirstDeque接口中声明。

Deque list = new LinkedList<Number>();
list.addFirst(3);