List<String> 字符串 = new LinkedList<>(); 和 LinkedL

  • 本文关键字:LinkedL LinkedList 字符串 String List new java
  • 更新时间 :
  • 英文 :


我正在学习Java中的接口,他们给出的一个例子是能够使用List接口创建链表List<String> strings = new LinkedList<>();但他们没有详细介绍。我为什么要这样做,反对LinkedList<String> strings = new LinkedList<>();

List<T>

是一个接口,这意味着在扩展List时必须实现一定数量的方法。LinkedList恰好延长了List.当你做List<String> strings = new LinkedList<>();时,java只能看到List的方法。但是,当您这样做时LinkedList<String> strings = new LinkedList<>();java将其视为LinkedList并且当您调用LinkedList具有getLast的方法时,它将起作用。人们List<String> strings = new LinkedList<>();主要是为了可读性,但它应该大致相同。

对于局部变量,这并不重要,至少在这种情况下不是这样。

List<String> strings = new LinkedList<>();的主要好处是,如果需要,您可以简单地将 LinkedList 换成 ArrayList 或任何其他 List 实现。

这在类的"边缘"(参数、返回类型、字段)最为重要,因为它使您的 API 更加灵活,原因有两个:

  • 其他类不受您选择的 List 实现的约束,因为您的类将采用任何 List
  • 与您的类交互的其他类强制不知道您的类内部选择使用哪个 List 实现,这意味着您可以随时从 ArrayList 切换到 LinkedList,反之亦然,而不会破坏类之外的代码。

摘自Effective Java, 3rd Edition, Item 64:通过接口引用对象

如果您养成了使用接口作为类型的习惯,那么您的程序 会更加灵活。如果您决定要切换 实现时,您所要做的就是更改 构造函数(或使用不同的静态工厂)。

因此,使用List<String> strings = new LinkedList<>();,您只需更改实现名称,其余的客户端代码保持不变。

使用LinkedList<String> strings = new LinkedList<>();时,您可能需要修改客户端代码。

请注意,将实现类作为类型是完全合适的。但是,如果您可以使用接口作为类型,这是最佳选择。

最新更新