在浏览EnumSet<E> of方法时,我看到了多个of方法的重载实现:
public static <E extends Enum<E>> EnumSet<E> of(E e)
public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2)
.
.
public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3, E e4, E e5)
Run Code Online (Sandbox Code Playgroud)
然后用另一个重载方法 varargs
public static <E extends Enum<E>> EnumSet<E> of(E first, E... rest) {
EnumSet<E> result = noneOf(first.getDeclaringClass());
result.add(first);
for (E e : rest)
result.add(e);
return result;
}
Run Code Online (Sandbox Code Playgroud)
当这个varargs可以处理其他实现时,为什么这个方法会以这种方式重载?这有什么具体原因吗?
我曾经历过同样的Javadoc,但我找不到任何令人信服的解释.
该流接口有两个重载方法of().其中一个是变量方法,而另一个是一个参数.
单参数方法是一种性能优化,而不是将一个参数传递给变量方法?如果是这样,它如何提高性能?可以问这个empty()方法的相同问题,这似乎是围绕变量的语法糖of().
我看到这些方法的实现方式不同,显然差别在于如何Spliterator实例化; 但这为StreamAPI 提供了什么优势?