Builder模式多个varargs

时间:2015-11-20 07:48:24

标签: java variadic-functions effective-java builder-pattern

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

  1. 构建器模式如何允许多个var-args?
  2. 为什么传统的构造函数只允许一个var-arg? (可能是因为如果存在多个var-args会导致歧义,当两者的定义数据类型相同时,但我不确定这是否是正确的原因。)
  3. 我的代码中没有使用var-args,但是我知道它们的用途。我仍然无法理解上述陈述背后的原因。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:6)

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

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

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

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