Java review(16) ... 可变参数列表
可变参数列表是Java的语法糖之一:
static void a(String... strings) {
System.out.println(Arrays.toString(strings));
}
@Test
public void test1() throws Exception {
a();
a("1");
a("1", "2");
a(new String[] {"1", "2", "3"});
a(Arrays.asList("1", "2", "3", "4").toArray(new String[]{}));
}
通过这种方式可以动态的选择传递多个参数或者不传递参数
输出:
[]
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
它支持任意类型,包括int、int[]
static void b(int... ints) {
System.out.println(Arrays.toString(ints));
}
static void b2(int[]... ints) {
System.out.println(Arrays.toString(ints));
}
int[] 时代表传入的是二维数组了。
我们可以通过Object... objects来使得这一特性进一步增强:
static void c(Object... objects) {
System.out.println(Arrays.toString(objects));
}
@Test
public void test2() throws Exception {
c();
c("1");
c("1", "2");
c(new String[] {"1", "2", "3"});
c(Arrays.asList("1", "2", "3", "4").toArray(new String[]{}));
c(new int[] {1, 2, 3, 4, 5});
c(Arrays.asList(1.23, 1.2, 1.55).toArray(new Double[]{}));
}
编译时有警告,告诉我们
这个警告和输出是契合的,我们传入的是new int[] {1, 2, 3, 4, 5},期望他被当作数组,而实际上他被当作一个单独的对象:
[]
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[[I@5e8c92f4] <== 因为 Object o = new int[] {1, 2, 3, 4, 5} 也成立
[1.23, 1.2, 1.55]
难得的,Java只是警告而不是直接编译错误。
可以将固定参数和可变参数配合使用,但是可变参数只能放在最后面:
static void d(int t, Object... objects) {
for (int i = 0; i < t; i ++) {
System.out.println(Arrays.toString(objects));
}
}
@Test
public void test3() throws Exception {
d(2,"1", "2");
d(3, new Object[] {"1", "2", "3"});
}
输出:
[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
版权声明
本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途
发布时间:2019年11月29日 15:47:34
备案号:
闽ICP备19015193号-1
关闭特效
评论区#
还没有评论哦,期待您的评论!
引用发言