构建器模式多个可变参数

Builder pattern multiple varargs

我正在阅读 Joshua Bloch 的 'Effective Java',在第 2 项中,他提到了在构造函数中处理多个参数时使用构建器模式的优势。一切都很好,直到我看到传统构造函数和此模式之间的多个 var-args 差异。 所以,我对此有一些疑问:

  1. 构建器模式如何允许多个可变参数?
  2. 为什么传统的构造函数只允许一个 var-arg? (也许是因为如果有多个 var-args,当两者定义的数据类型相同时,它会导致歧义,但我不确定这是它背后的正确原因。)

虽然我没有在我的代码中使用 var-args,但是我知道它们的用途。我仍然无法理解上述陈述背后的原因。 任何帮助将不胜感激。

没有方法签名(包括构造函数)允许使用多个可变参数。只能有一个,而且必须是最后一个参数。

这只是语言规范中的一个限制。是的,如果您允许更大的灵活性,其原因可能是它会很快变得模棱两可。

在构建器模式中,没有这样的限制,因为每个参数都可以有自己的方法。

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