如何在Java中初始化List <string>对象?</string>

时间:2012-11-15 10:01:10

标签: java list

我无法按以下代码初始化List:

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>

13 个答案:

答案 0 :(得分:670)

如果您检查List Interface List<E> ,则会注意到:

interface

成为new List()意味着无法实例化(无法class)。

如果您检查该链接,则会找到一些List来实施AbstractList

  

所有已知的实施类:

     

AbstractSequentialListArrayListAttributeListCopyOnWriteArrayListLinkedListRoleListRoleUnresolvedListStackVector List<String> supplierNames1 = new ArrayList<String>(); List<String> supplierNames2 = new LinkedList<String>(); List<String> supplierNames3 = new Vector<String>();

可以实例化这些。使用他们的链接了解更多关于他们的信息,I.E:了解哪个更适合您的需求。

最常用的3种可能是:

Arrays

加成:
您还可以使用class List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3"); System.out.println(supplierNames.get(1)); 以更简单的方式使用值对其进行实例化,如下所示:

fixed-size

但请注意,您不能在该列表中添加更多元素,因为它是{{1}}。

答案 1 :(得分:79)

无法实例化接口,但实现很少:

<强> 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

List<String> list = List.of("one", "two", "three");

另外,其他库提供了很多其他方法,例如 Guava

List<String> list = Lists.newArrayList("one", "two", "three");

答案 2 :(得分:36)

List是一个接口,你不能实例化一个接口,因为接口是一个约定,你的类应该有哪些方法。为了实例化,您需要该接口的一些实现(实现)。使用非常流行的List接口实现尝试以下代码:

List<String> supplierNames = new ArrayList<String>(); 

List<String> supplierNames = new LinkedList<String>();

答案 3 :(得分:13)

您需要使用ArrayList<String>等。

List<String>是一个界面。

使用此:

import java.util.ArrayList;

...

List<String> supplierNames = new ArrayList<String>();

答案 4 :(得分:11)

List是一个接口,您无法初始化接口。而是实例化一个实现类。

像:

List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();

答案 5 :(得分:9)

在大多数情况下,您需要简单的ArrayList - List

的实现

在JDK第7版之前

List<String> list = new ArrayList<String>();

JDK 7及更高版本,您可以使用菱形运算符

List<String> list = new ArrayList<>();

此处记录了更多信息Oracle documentation - Collections

答案 6 :(得分:8)

List只是一个接口,是一些通用列表的定义。您需要提供此列表界面的实现。最常见的两种是:

ArrayList - 在数组上实现的列表

List<String> supplierNames = new ArrayList<String>();

LinkedList - 实现类似互连元素链的列表

List<String> supplierNames = new LinkedList<String>();

答案 7 :(得分:6)

取决于您要使用的List类型,例如

List<String> supplierNames = new ArrayList<String>();

应该让你去。

List是接口,ArrayList是List接口的一个实现。通过阅读JavaDocs of the List interface可以找到更多符合您需求的实现。

答案 8 :(得分:6)

如果您只想创建一个只包含一个对象的不可变 List<T>,则可以使用此API:

List<String> oneObjectList = Collections.singletonList("theOnlyObject”);

更多信息:docs

答案 9 :(得分:5)

列表是一个接口。你不能使用List来初始化它。

  List<String> supplierNames = new ArrayList<String>();

这些是List的一些要求的类,

ArrayList, LinkedList, Vector

您可以根据自己的要求使用其中任何一项。这些每个类都有自己的特色。

答案 10 :(得分:3)

以防万一,任何人仍然围绕这个问题挥之不去。因为,我看到一两个新用户再次提出同样的问题,然后每个人都在说,不,你不能这样做,亲爱的谨慎,除了这里给出的所有答案,我希望提供额外信息 - 是的,你可以这样做,列表列表=新列表(); 但是以编写接口的所有方法的实现为代价。 这个概念不仅仅是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(); 但是,显然你可以做到这一点而且这是一个很难的声明,可以让你可以&#39;

答案 11 :(得分:0)

我们创建了soyuz-to来简化1个问题:如何将X转换为Y(例如,将String转换为Integer)。构造对象也是一种转换,因此它具有构造MapListSet的简单功能:

import io.thedocs.soyuz.to;

List<String> names = to.list("John", "Fedor");

请检查它-它还有很多其他有用的功能

答案 12 :(得分:0)

代替:

List<String> supplierNames = new List<String>();

如果您使用的是最新的 JDK,请写下这个:

 List<String> supplierNames = new ArrayList<>();

这是初始化列表的正确方法。