首页 文章

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

提问于
浏览
323

我无法初始化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>

11 回答

  • 6

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

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

    更多信息:docs

  • 3

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

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

    这些是列表中的一些实例化的类,

    ArrayList, LinkedList, Vector
    

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

  • 13

    如果你检查APIList ,你会注意到它说:

    Interface List<E>
    

    作为 interface 意味着它无法实例化(没有 new List() 是可能的) .

    如果您检查该链接,您会发现一些实现 Listclass

    所有已知的实现类:AbstractList,AbstractSequentialList,ArrayList,AttributeList,CopyOnWriteArrayList,LinkedList,RoleList,RoleUnresolvedList,Stack,Vector

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

    最常用的3种可能是:

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

    奖金:
    您还可以使用 Arrays class 以更简单的方式使用值实例化它,如下所示:

    List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
    System.out.println(supplierNames.get(1));
    

    但请注意,您不能向该列表添加更多元素,因为它是 fixed-size .

  • 8

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

    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");
    
  • 621

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

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

    要么

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

    您需要使用 ArrayList<String> 等 .

    List<String> 是一个界面 .

    用这个:

    import java.util.ArrayList;
    
    ...
    
    List<String> supplierNames = new ArrayList<String>();
    
  • 36

    List是一个接口,您无法初始化接口 . 实际上实例化一个实现类 .

    喜欢:

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

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

    在JDK第7版之前

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

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

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

    进一步的信息写在这里Oracle documentation - Collections

  • 9

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

    ArrayList - 在数组上实现的列表

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

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

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

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

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

    应该让你去 .

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

  • 10

    以防万一,任何人仍然围绕这个问题挥之不去 . 因为,我看到一两个新用户再次提出同样的问题,然后每个人都在说,不,你不能这样做,亲爱的普律当丝,除了这里给出的所有答案,我想提供额外的信息 - 是的你实际上可以do, List list = new List(); 但是以编写Interfaces所有方法的实现为代价 . 这个概念不仅仅是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;
            }
    

    .....等等(不能写所有方法 . )

    这是 Anonymous class 的一个例子 . 有人陈述时,这是正确的, No you cant instantiate an interface, ,这是正确的 . 但是你永远不能说,但是,显然你可以做到这一点,这是一个很难说明你做不到的事情 .

相关问题