我无法初始化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 回答
如果您只想创建一个仅包含 one 对象的 immutable
List<T>
,则可以使用此API:更多信息:docs
列表是一个接口 . 你不能使用List来初始化它 .
这些是列表中的一些实例化的类,
您可以根据自己的要求使用其中任何一项 . 这些每个类都有自己的功能 .
如果你检查API为
List
,你会注意到它说:作为
interface
意味着它无法实例化(没有new List()
是可能的) .如果您检查该链接,您会发现一些实现
List
的class
:那些可以实例化 . 使用他们的链接了解更多关于他们,I.E:知道哪个更适合您的需求 .
最常用的3种可能是:
奖金:
您还可以使用
Arrays
class
以更简单的方式使用值实例化它,如下所示:但请注意,您不能向该列表添加更多元素,因为它是
fixed-size
.无法实例化接口,但实现很少:
JDK2
JDK7
JDK8
JDK9
此外,还有许多其他库提供的其他方式,如 Guava .
List是一个接口,你不能实例化一个接口,因为接口是一个约定,你的类应该有哪些方法 . 为了实例化,您需要该接口的一些实现(实现) . 使用非常流行的List接口实现尝试以下代码:
要么
您需要使用
ArrayList<String>
等 .List<String>
是一个界面 .用这个:
List是一个接口,您无法初始化接口 . 实际上实例化一个实现类 .
喜欢:
在大多数情况下,您需要简单的
ArrayList
-List
的实现在JDK第7版之前
JDK 7及更高版本可以使用菱形运算符
进一步的信息写在这里Oracle documentation - Collections
List只是一个接口,是一些通用列表的定义 . 您需要提供此列表界面的实现 . 最常见的两种是:
ArrayList - 在数组上实现的列表
LinkedList - 实现类似互连元素链的列表
取决于您要使用的List类型,类似于
应该让你去 .
List是接口,ArrayList是List接口的一个实现 . 通过阅读JavaDocs of the List interface可以找到更适合您需求的更多实现 .
以防万一,任何人仍然围绕这个问题挥之不去 . 因为,我看到一两个新用户再次提出同样的问题,然后每个人都在说,不,你不能这样做,亲爱的普律当丝,除了这里给出的所有答案,我想提供额外的信息 - 是的你实际上可以do, List list = new List(); 但是以编写Interfaces所有方法的实现为代价 . 这个概念不仅仅是List list = new List();但
.....等等(不能写所有方法 . )
这是 Anonymous class 的一个例子 . 有人陈述时,这是正确的, No you cant instantiate an interface, ,这是正确的 . 但是你永远不能说,但是,显然你可以做到这一点,这是一个很难说明你做不到的事情 .