我不能在以下代码中初始化一个列表:

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

如果你正在使用最新的JDK,请这样写:

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

这是初始化List的正确方法。

其他回答

如果你检查List的API,你会注意到它说:

Interface List<E>

作为一个接口意味着它不能被实例化(不可能有新的List())。

如果你检查这个链接,你会发现一些类实现了List:

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

其中一些可以实例化(没有定义为抽象类的那些)。使用他们的链接来了解更多关于他们的信息,即:知道哪个更适合你的需求。

最常用的三种可能是:

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

奖金: 你也可以用数组类以更简单的方式实例化它,如下所示:

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

但请注意,您不允许向该列表中添加更多元素,因为它是固定大小的。

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

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

or

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

以防万一,有人还在纠结这个问题。因为,我看到一两个新用户再次问同样的问题,每个人都告诉,不,你不能这样做,亲爱的普律当丝,除了这里给出的所有答案,我想提供额外的信息- 是的,你可以这样做,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();但是,很明显,你可以做到这一点,这是一个很难的声明,你不能做到。

而不是:

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

如果你正在使用最新的JDK,请这样写:

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

这是初始化List的正确方法。

List是接口,不能初始化接口。应该实例化一个实现类。

如:

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