【发布时间】:2014-08-09 10:57:32
【问题描述】:
在整个 Google Guava 库中,我注意到使用“一个(或两个)加 var args”技术的趋势。
例子:
void add(T value, T... moreValueArr)void add(T value, T value2, T... moreValueArr)
我花了一段时间才弄清楚原因:为了防止调用零参数(在第一种情况下)或一个参数(在第二种情况下)。
进一步扩展这项技术,如果在下面的场景 A 和 B 之间进行选择,哪个更可取?我希望有深入的 Java 知识的人可以提供见解。
场景A:(两种方法)
void add(T... valueArr)void add(Iterable<? extends T> iterable)
场景B:(三种方法)
void add(T value, T... moreValueArr)void add(T[] valueArr)void add(Iterable<? extends T> iterable)
B 可能更好的一个想法:我注意到许多 Java 程序员不知道数组可以直接作为 var args 传递。因此,B 可能会提示什么是可能的。
最后,我意识到 B 有额外的开发、测试和维护开销。请把这些考虑放在一边。
这个问题是我原来问题的一个细微变化:Java varags method param list vs. array
【问题讨论】:
-
void add(T... valueArr)和void add(T[] valueArr)相同,但您需要手动构造数组以将其以第二种形式传递。 -
void add(T... valueArr)表示零个和多个 T 类型的对象是可以接受的,而void add(T value, T... moreValueArr)表示一个和多个。现在选择取决于程序和要求。 -
void add(Iterable<T> iterable)有所不同,在 Collection 对象的情况下更可取 -
@user3218114 - 答案胜过 3 cmets :)
-
@TheLostMind OK 刚刚删除。
标签: java arrays guava variadic-functions