3

Linkedlist.java を見ると、オーバーロードされたコンストラクターがあり、そのうちの 1 つに空の this() が含まれています。通常、これはデフォルトのパラメーターで見られます。パラメータのない this() の使用法は何ですか?

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

    /**
     * Constructs a list containing the elements of the specified
     * collection, in the order they are returned by the collection's
     * iterator.
     *
     * @param  c the collection whose elements are to be placed into this list
     * @throws NullPointerException if the specified collection is null
     */
    public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);
    }
4

2 に答える 2

2

これは、コンストラクター チェーンと呼ばれます。これは、最も一般的なスーパークラス ( Object) のコンストラクターから開始して、より具体的なものに移動するオブジェクトを初期化できるようにするメカニズムです (次のレベルに進む前に、新しいオブジェクトをそのクラスの有効な状態に初期化する各レベル)。 .

thisコンストラクターは、このクラスが実行される前に、現在のクラス ( で示される) または親クラス ( で示される)の他のどのコンストラクターをsuper呼び出すかを選択できます。super()他に何かが指定されていない限り (または、親クラスのパラメーターなしのコンストラクターが表示されていない場合)、デフォルトの連鎖オプションは (暗黙的に) です。

あなたの場合、コンストラクターが最初にコンストラクターを呼び出すことthis()を意味します。スニペットでノーオペレーションですが、その存在により、パラメーターなしのコンストラクターの初期化戦略の変更が他のコンストラクターにも採用されることが保証されます。そのため、クラスの初期化ロジックを変更すると、エラーが発生しにくくなります。LinkedList(Collection<? extends E> c)LinkedList()

于 2013-09-29T18:56:07.973 に答える
0

Java 言語では、デフォルト コンストラクター以外のコンストラクターを公開すると、デフォルト コンストラクターが消えます。明示的なデフォルト コンストラクタを配置できます。デフォルト以外のコンストラクターとともに明示的なデフォルト コンストラクターの存在が必要な場合はthis()、コンストラクターに配置する必要があります。

于 2013-09-29T19:24:09.400 に答える