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)。我哪里出错了?
答案 0 :(得分:2)
您的引用类型是List<T>
接口,它不会声明任何addFirst
方法。
您可以将参考类型明确设置为LinkedList<String>
:
LinkedList<String> list = new LinkedList<String>(
Arrays.asList(stuff));
或者你可以施放:
((LinkedList<String>)list).addFirst("first");
首选方法。
投射稍微“危险”,因为它假定您的引用尚未分配新值。
例如,如果您在上述两个语句之间分配了list
到new ArrayList<String>();
,那么您将在运行时获得ClassCastException
。
答案 1 :(得分:1)
方法addFirst
存在于课程LinkedList
上,而不存在于List
接口上。
这里:
List<String> list = //whatever
list
被视为List
,而不是LinkedList
将其更改为:
LinkedList<String> list = //whatever
答案 2 :(得分:0)
LinkedList
实现两个接口:List
和Deque
。
方法addFirst
在Deque
接口中声明。
Deque list = new LinkedList<Number>();
list.addFirst(3);