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

新手上路,请多包涵

我无法像下面的代码那样初始化一个列表:

 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>

原文由 ahmednabil88 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 767
2 个回答

如果您检查 ListAPI ,您会注意到它说:

 Interface List<E>

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

如果您检查该链接,您会发现一些 class 实现 List --- 的 es:

所有已知的实现类:

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

原文由 J.A.I.L. 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 LazerBanana 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题