繁体   English   中英

如何初始化列表<String> Java中的对象?

[英]How to initialize List<String> object in Java?

我无法像以下代码那样初始化列表:

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>

如果您检查API for List ,您会注意到它说:

Interface List<E>

作为一个interface意味着它不能被实例化(不可能有new List() )。

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

所有已知的实现类:

AbstractList , AbstractSequentialList , ArrayList , AttributeList , CopyOnWriteArrayList , LinkedList , RoleList , RoleUnresolvedList , Stack , Vector

其中一些可以被实例化(那些未定义为abstract class的)。 使用他们的链接了解更多关于他们的信息,即:了解哪个更适合您的需求。

最常用的 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的。

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

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

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

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

或者

List<String> supplierNames = new LinkedList<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>();

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

在 JDK 版本 7 之前

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

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

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

更多信息写在这里Oracle 文档 - 集合

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

ArrayList - 在数组上实现的列表

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

LinkedList - 一个像互连的元素链一样实现的列表

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

根据您要使用的列表类型,例如

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

应该让你去。

List 是接口,ArrayList 是 List 接口的一种实现。 阅读List 接口的 JavaDocs可以找到更多可能更适合您需求的实现。

如果你只想创建一个只有一个对象的不可变List<T> ,你可以使用这个 API:

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

更多信息: 文档

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

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

这些是一些 List impelemented 类,

ArrayList, LinkedList, Vector

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

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

代替 :

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

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

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

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

我们创建了soyuz-to来简化 1 个问题:如何将X转换为Y (例如StringInteger )。 对象的构造也是一种转换,所以它有一个简单的函数来构造MapListSet

import io.thedocs.soyuz.to;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM