【问题标题】:LinkedList data structure, why we need to call empty default constructor from a different constructorLinkedList 数据结构,为什么我们需要从不同的构造函数调用空的默认构造函数
【发布时间】:2015-08-02 18:53:05
【问题描述】:

java.util.LinkedList 类中,定义了 2 个构造函数,默认的和参数化的,它们接受一个集合。看实现的时候看到参数化的构造函数有this(),基本上是在调用默认构造函数。

但是默认构造函数是空的。所以我只是好奇这是否是调用默认构造函数的最佳实践,即使它是空的,或者这背后是否有任何推理。如果我们不调用默认构造函数会发生什么。

GrepCode LinkedList implementation

【问题讨论】:

    标签: java data-structures constructor linked-list default-constructor


    【解决方案1】:

    如果将来任何时候扩展默认构造函数,则不必更改其他构造函数。

    它告诉我们,扩展构造函数基本上是默认构造函数,但添加了一些特殊功能(为方便起见)。

    【讨论】:

      【解决方案2】:

      这只是意味着LinkedList的任何初始化形式都必须首先执行默认初始化步骤。

      您可能觉得很奇怪,因为目前还没有默认的初始化步骤(但可能稍后会出现)。

      【讨论】:

        【解决方案3】:

        这并不是公认的良好做法。也许默认构造函数在以前的版本中做了一些事情。也许开发人员认为这是一个好主意,所以如果在默认构造函数中做了一些额外的事情,它也会在另一个中完成。如果您查看 ArrayList,您会发现做出了不同的选择。

        如果我们不调用默认构造函数会发生什么。

        只是没有调用默认构造函数。超类无参数构造函数被隐式调用。

        【讨论】:

          【解决方案4】:

          参数化的版本应该和不参数化的一样创建一个列表,并调用一个方法额外添加元素。默认构造函数为空的事实是特定于实现的。

          /**
           * Constructs an empty list.
           */
          public LinkedList() {
          }
          

          它打算以这种方式构造它的事实仍然存在。

          【讨论】:

          • +1。您可能是对的:开发人员的意图可能是明确表示从集合创建列表首先包括创建一个空列表,然后添加给定集合的所有元素。
          猜你喜欢
          • 2017-01-10
          • 2013-03-20
          • 2019-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-28
          相关资源
          最近更新 更多