Шаблон построителя с несколькими varargs

Я читаю книгу Джошуа Блоха «Эффективная Java», где в пункте 2 он упоминает преимущества использования шаблона Builder при работе с несколькими параметрами в конструкторе. Все хорошо, пока я не увидел разницу во множестве var-args между обычным конструктором и этим шаблоном. Итак, у меня есть некоторые сомнения по этому поводу:

  1. Как шаблон построителя позволяет использовать несколько var-args?
  2. Почему обычный конструктор допускает только один var-arg? (Возможно, из-за того, что это вызовет неоднозначность в случае наличия нескольких var-args, когда определенный тип данных для обоих одинаков, но я не уверен, что это правильная причина.)

Хотя я не использовал var-args в своем коде, но да, я знаю их использование. Тем не менее я не могу понять причину приведенных выше заявлений. Любая помощь будет оценена по достоинству.


person gaurav jain    schedule 20.11.2015    source источник


Ответы (1)


Никакая сигнатура метода (включая конструкторы) не позволяет использовать несколько varargs. Может быть только один, и он должен быть последним аргументом.

Это просто ограничение в спецификации языка. И да, причина этого, вероятно, в том, что это может очень быстро стать неоднозначным, если вы допустите больше гибкости.

В шаблоне построителя такого ограничения нет, так как каждый параметр может получить свой собственный метод.

  builder
    .withOptions("a", "b", "c")   // varargs
    .withColors("red", "blue")    // more varargs
    .build();
person Thilo    schedule 20.11.2015