生成器模式多个varargs

gau*_*ain 4 java variadic-functions builder-pattern effective-java

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

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

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

Thi*_*ilo 7

没有方法签名(包括构造函数)允许多个varargs.只能有一个,它必须是最后一个参数.

这只是语言规范的一个限制.是的,如果你允许更多的灵活性,那么它的原因很可能是它变得模棱两可.

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

  builder
    .withOptions("a", "b", "c")   // varargs
    .withColors("red", "blue")    // more varargs
    .build();
Run Code Online (Sandbox Code Playgroud)