这种模式用于优化接受可变参数的方法。
如果您能确定您大部分时间只使用其中几个参数,您可能会希望定义一个重载方法,并使用最常用参数的数量:
public void foo(int num1);
public void foo(int num1, int num2);
public void foo(int num1, int num2, int num3);
public void foo(int... nums);
这将帮助您在调用可变参数方法时避免创建数组。为了进行性能优化,使用的模式是:
List<String> list = List.of("foo", "bar");
static <E> List<E> of(E e1, E e2) {
return new ImmutableCollections.List2<>(e1, e2);
}
更有趣的是,从3个参数开始,我们再次委托给可变参数构造函数:
static <E> List<E> of(E e1, E e2, E e3) {
return new ImmutableCollections.ListN<>(e1, e2, e3); // varargs constructor
}
目前看起来很奇怪,但我猜测这是为了未来的改进保留的选项,并且作为一个选择,可以重载所有构造方法List3(3个参数),List7(7个参数)...
等等。
java
中可用,人们更可能搜索“java 9 collection.of”而不是“Guava colleciton.of”,因此我也投票支持重新开放。 - Chetan Kinger@SafeVarargs
不存在,而 JEP 269 中过载的驱动程序是性能。 - Stefan Zobel@SafeVarargs @SuppressWarnings("unchecked") SetN(E... input) {
。 - Eugene