一般,我们在编写接口方法时,参数的个数都是固定的。
今天在看String静态方法join时,发现,参数可以传任意多个。这激起了我的好奇心,翻开源码
public static String join(CharSequence delimiter, CharSequence... elements) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(elements);
// Number of elements not likely worth Arrays.stream overhead.
StringJoiner joiner = new StringJoiner(delimiter);
for (CharSequence cs: elements) {
joiner.add(cs);
}
return joiner.toString();
}
发现CharSequence后面有三个点"…",意思就是可以可有任意多个该类型的参数。
动手写了一段代码:
public int add(int... elements){
int sum = 0;
//System.out.println(elements.getClass());
for (int i:elements){
sum += i;
}
return sum;
}
可以传任意数量的int变量,然后求和。
这时候就开始想,这个elements究竟是什么类型的变量呢?从遍历方式上来看,可能是一个数组或者集合。用idea提示了一下elemens.,提示出来的方法没有list集合特有的方法,不是集合。
但是java中数组的长度是不可以改变的,用一个不可变长度的数组来接受可变数量的参数,这样想确实不符合逻辑。然后输出elements.length,发现是参数的个数。那么可以猜想,这个数组应该是在调用这个方法时创建的一个和此类型参数个数相同的数组。
之后又搜了好多资料,发现一篇讲的比较好的博客:
https://www.cnblogs.com/fnlingnzb-learner/p/5952716.html