4

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

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

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

4

1 回答 1

7

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

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

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

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