Java 的可变参数(Varargs) 方法让我们调用起来很方便,不需要总是去构造一个数组来传递不定数量的参数,而且还可以作为方法的一个可选参数,如
void foo(int id, String...name) {
String yourName = name.length == 0 ? "Anonymous" : name[0];
......
}
想要告诉名字就调用 foo(1, "Yanbin")
, 不想的话就用 foo(1)
.
但我们在使用 Java Varargs 时,当变参类型定义为 Object...objects
时就要当心了,因为 Object 类型的包容性原因一不小心就可以掉到坑里去了,例如下面的方法
void foo(Object...objects) {
Arrays.stream(objects).forEach(System.out::println());
}
当引用类型是 Object[]
时调用没问题,下面代码调用可以得到预期的结果 阅读全文 >>