4

Joshua Bloch の 'Effective Java' を読んでいます。項目 2 では、コンストラクターで複数のパラメーターを処理するときに Builder パターンを使用する利点について言及しています。従来のコンストラクターとこのパターンの間の複数の var-args の違いを見るまでは、すべて問題ありません。だから、私はそれに関していくつかの疑問があります:

  1. ビルダーパターンはどのように複数の var-args を許可しますか?
  2. 従来のコンストラクターで var-arg が 1 つしか許可されないのはなぜですか? (おそらく、両方の定義されたデータ型が同じ場合、複数の var-args がある場合にあいまいさが生じるという事実によるものですが、これがその背後にある正しい理由であるかどうかはわかりません。)

ただし、コードで var-args を使用したことはありませんが、その使用法は知っています。それでも、上記のステートメントの背後にある理由を理解できません。どんな助けでも大歓迎です。

4

1 に答える 1

7

メソッド シグネチャ (コンストラクターを含む) では、複数の可変引数を使用できません。存在できるのは 1 つだけであり、それは最後の引数でなければなりません。

これは、言語仕様の単なる制限です。はい、その理由は、柔軟性を高めると、非常に速くあいまいになる可能性があるためです。

ビルダー パターンでは、すべてのパラメーターが独自のメソッドを取得できるため、そのような制限はありません。

  builder
    .withOptions("a", "b", "c")   // varargs
    .withColors("red", "blue")    // more varargs
    .build();
于 2015-11-20T07:58:03.463 に答える