我不能在以下代码中初始化一个列表:
List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));
我面临以下错误:
不能实例化List<String>类型
我如何实例化列表<字符串>?
我不能在以下代码中初始化一个列表:
List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));
我面临以下错误:
不能实例化List<String>类型
我如何实例化列表<字符串>?
当前回答
你需要使用ArrayList<String>之类的。
List<String>是接口。
用这个:
import java.util.ArrayList;
...
List<String> supplierNames = new ArrayList<String>();
其他回答
List是接口,不能初始化接口。应该实例化一个实现类。
如:
List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
如果你只想创建一个只有一个对象的不可变List<T>,你可以使用这个API:
List<String> oneObjectList = Collections.singletonList("theOnlyObject”);
更多信息:文档
在大多数情况下,您需要简单的ArrayList—List的实现
JDK版本7之前
List<String> list = new ArrayList<String>();
JDK 7及以后版本可以使用菱形操作符
List<String> list = new ArrayList<>();
进一步的信息写在这里Oracle文档-集合
以防万一,有人还在纠结这个问题。因为,我看到一两个新用户再次问同样的问题,每个人都告诉,不,你不能这样做,亲爱的普律当丝,除了这里给出的所有答案,我想提供额外的信息- 是的,你可以这样做,List List = new List(); 但是以编写接口的所有方法的实现为代价。 这个概念不是简单的List List = new List();但
List<Integer> list = new List<Integer>(){
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
return false;
}
…等等(不能写所有的方法。)
这是一个匿名类的例子。当有人说,不,你不能实例化一个接口,这是正确的。但你永远不能说,你不能写List List = new List();但是,很明显,你可以做到这一点,这是一个很难的声明,你不能做到。
不能实例化接口,但有几个实现:
JDK2
List<String> list = Arrays.asList("one", "two", "three");
JDK7
//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
JDK8
List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());
JDK9
// creates immutable lists, so you can't modify such list
List<String> immutableList = List.of("one", "two", "three");
// if we want mutable list we can copy content of immutable list
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));
此外,还有许多其他库提供的其他方法,如Guava。
List<String> list = Lists.newArrayList("one", "two", "three");