构建器模式多个可变参数
Builder pattern multiple varargs
我正在阅读 Joshua Bloch 的 'Effective Java',在第 2 项中,他提到了在构造函数中处理多个参数时使用构建器模式的优势。一切都很好,直到我看到传统构造函数和此模式之间的多个 var-args 差异。
所以,我对此有一些疑问:
- 构建器模式如何允许多个可变参数?
- 为什么传统的构造函数只允许一个 var-arg?
(也许是因为如果有多个 var-args,当两者定义的数据类型相同时,它会导致歧义,但我不确定这是它背后的正确原因。)
虽然我没有在我的代码中使用 var-args,但是我知道它们的用途。我仍然无法理解上述陈述背后的原因。
任何帮助将不胜感激。
没有方法签名(包括构造函数)允许使用多个可变参数。只能有一个,而且必须是最后一个参数。
这只是语言规范中的一个限制。是的,如果您允许更大的灵活性,其原因可能是它会很快变得模棱两可。
在构建器模式中,没有这样的限制,因为每个参数都可以有自己的方法。
builder
.withOptions("a", "b", "c") // varargs
.withColors("red", "blue") // more varargs
.build();
我正在阅读 Joshua Bloch 的 'Effective Java',在第 2 项中,他提到了在构造函数中处理多个参数时使用构建器模式的优势。一切都很好,直到我看到传统构造函数和此模式之间的多个 var-args 差异。 所以,我对此有一些疑问:
- 构建器模式如何允许多个可变参数?
- 为什么传统的构造函数只允许一个 var-arg? (也许是因为如果有多个 var-args,当两者定义的数据类型相同时,它会导致歧义,但我不确定这是它背后的正确原因。)
虽然我没有在我的代码中使用 var-args,但是我知道它们的用途。我仍然无法理解上述陈述背后的原因。 任何帮助将不胜感激。
没有方法签名(包括构造函数)允许使用多个可变参数。只能有一个,而且必须是最后一个参数。
这只是语言规范中的一个限制。是的,如果您允许更大的灵活性,其原因可能是它会很快变得模棱两可。
在构建器模式中,没有这样的限制,因为每个参数都可以有自己的方法。
builder
.withOptions("a", "b", "c") // varargs
.withColors("red", "blue") // more varargs
.build();