【问题标题】:Assigning ArrayList to List [duplicate]将 ArrayList 分配给 List [重复]
【发布时间】:2013-02-05 03:40:28
【问题描述】:

下面两行有什么区别

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

感谢回复

【问题讨论】:

  • 我在昨天和今天看到了同样的问题(甚至是同样的文字)(但找不到)。
  • @LuiggiMendoza。甚至我。
  • 解释here
  • 哎呀我还没看到它存在我要删除我的
  • @LloydSantos 谢谢,至少我知道我没疯 :)

标签: java


【解决方案1】:

只要你以后只需要List接口,通常推荐后者。这就是所谓的“编程接口,而不是实现”。

关于它们之间的详细区别,我已经在stackoverflow上的另一个问题中回答了:The difference between "C c = new C()" and "A c = new C()" when C is a subclass of A in Java

【讨论】:

    【解决方案2】:

    其次是Program to Interface 的示例及其首选方式。
    详情What does it mean to "program to an interface"?

    【讨论】:

      【解决方案3】:

      尽可能将特定实现隐藏在接口后面。 see this

      【讨论】:

        【解决方案4】:

        本身并没有太大的区别,但是List应该尽可能使用,因为它是一个接口,你可以看到标准库的方法参数通常是List&lt;K&gt;,所以可以传递任何特定的实现,喜欢ArrayListLinkedList

        【讨论】:

          【解决方案5】:

          几乎总是第二个优先于第一个。第二个优点是List 的实现可以更改(例如更改为LinkedList),而不会影响其余代码。使用ArrayList 很难做到这一点,不仅因为您需要在任何地方将ArrayList 更改为LinkedList,还因为您可能使用了ArrayList 特定方法。

          【讨论】:

            【解决方案6】:

            第二种方法通常是首选,因为它将实现隐藏在接口后面。

            这意味着以后,如果需求发生变化并且需要 List 接口的另一个实现,您可以只更改一行代码,其他所有内容仍然可以正常工作,因为您编写的是接口而不是类。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-08-11
              • 2016-07-01
              • 1970-01-01
              • 2012-06-15
              • 2019-08-24
              • 2018-02-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多