【问题标题】:"Instantiating" a List in Java? [duplicate]在Java中“实例化”一个列表? [复制]
【发布时间】:2023-03-30 14:26:01
【问题描述】:

尝试使用以下代码:

List<Integer> list = new List<Integer>();

我收到以下错误消息:

java.util.List 是抽象的;无法实例化

这是什么意思,为什么我不能像初始化 ArrayList 一样初始化 List

【问题讨论】:

    标签: java list


    【解决方案1】:

    在 Java 中,List 是一个接口。也就是不能直接实例化。

    相反,您可以使用ArrayList,它是该接口的一个实现,它使用数组作为其后备存储(因此得名)。

    由于ArrayListList的一种,你可以轻松上载它:

    List<T> mylist = new ArrayList<T>();
    

    这与 .NET 不同,从 2.0 版开始,List&lt;T&gt;IList&lt;T&gt; 接口的默认实现。

    【讨论】:

      【解决方案2】:

      List 是一个接口,而不是一个具体的类。
      接口只是一个类可以实现的一组功能;实例化接口没有任何意义。

      ArrayList 是一个具体的类,恰好实现了这个接口及其中的所有方法。

      【讨论】:

        【解决方案3】:

        使用List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();

        【讨论】:

          【解决方案4】:

          List 是接口,不是类,因此无法实例化。 ArrayList 很可能是您所追求的:

          ArrayList&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();

          Java 中的接口本质上定义了类的蓝图——实现接口的类必须提供列表定义的方法的实现。但实际的实现完全取决于实现类,在这种情况下为ArrayList

          JDK 还提供了LinkedList - 另一个符合列表接口的替代实现。它的工作方式与下面的ArrayList 非常不同,因此它在列表中途添加/删除项目时往往更有效,但对于绝大多数用例来说,它的效率较低。当然,如果您想定义自己的实现,这是完全可能的!

          简而言之,您不能创建一个列表,因为它是一个不包含具体代码的接口——这是实现该列表的类的工作,其中ArrayList 是迄今为止使用最多的(而且有充分的理由! )

          还值得注意的是,在 C# 中,List 是一个类,而不是一个接口 - 那是 IList。但同样的原则也适用,只是名称不同。

          【讨论】:

          • 我认为你的意思是在你的代码 sn-p 中写 new ArrayList :)
          • 我确实做到了,感谢您的编辑!
          【解决方案5】:

          List 在 Java 中不是真实存在的。它是一个接口,一种定义对象如何与其他对象交互的方式。因此,它永远不能被实例化。 ArrayListList 接口的实现,链表也是如此,等等。改用这些。

          【讨论】:

            【解决方案6】:

            Java 中的List 是一个接口,它定义了“列表”必须具备的某些品质。具体的列表实现,例如ArrayList 实现了这个接口并充实了各种方法的工作方式。你想用这个列表来完成什么?很可能,其中一个内置列表适合您。

            【讨论】:

              猜你喜欢
              • 2012-10-24
              • 2010-11-08
              • 1970-01-01
              • 1970-01-01
              • 2015-07-11
              • 1970-01-01
              • 2014-09-08
              相关资源
              最近更新 更多