可变参数,解决Method有不同个数参数的overload问题...
如何创建一个可变长度的参数,看代码:
[quote]
public void vararg(String varOne, String varTwo, String...strings ) {}
[/quote]
编译器会把它解析为"public void vararg(String varOne, String varTwo, String[] strings) {}",将"..."创建成一个<argument type>的array。
调用很简单...(零或以上多个参数)
[quote]
vararg("one","tow");[color=blue] //可以不传参数[/color]
vararg("one","tow","three"); [color=blue]//可以传入一个参数[/color]
vararg("one","tow","three",four); [color=blue]//可以传入多个参数[/color]
[/quote]
当然,也可以传入一个数组作为参数,如:
[quote]
public void vararg(int... i) {
for (int ivalue : i) {
System.out.println("the i value is: " +ivalue);
}
}
[/quote]
[quote]
//调用
int[] i = {1,2,3,4,5,6};
new ObjectB().vararg(i);
[/quote]
输出
[quote]
the i value is: 1
the i value is: 2
the i value is: 3
the i value is: 4
the i value is: 5
the i value is: 6
[/quote]
当然,如果是接受到一个零长度的list,最好做一个判断,可以抛出IllegalArgumentException异常。
[color=blue]But,有些限制:
1.一个方法只能有一个可变参数(一个省略号)
2.省略号只能写在方法参数列表的最后一个。[/color]
迭代可变参数List
将vararg当array来使用...如:
[quote]
public void vararg(String...strings ) {
for (String str : strings) {
System.out.println("the vararg value is: " +str);
}
}
[/quote]
输出
[quote]
the vararg value is: One
the vararg value is: Two
the vararg value is: Three
[/quote]
也可以将可变参数存在变量中...
[quote]
public void vararg(String...strings ) {
String[] arr = strings;[color][color=blue]//存在数组当中,因为自动将String... strings转成String[] strings.[/color]
List list = Arrays.asList(strings);[color=blue]//存在list当中[/color]
}
[/quote]
由于Tiger是autoboxing和auto-unboxing,所以,当我们需要使用primitive参数的时候,我们也可以在Method中使用wrapper类型,由于wrapper都是Object类型,因此用Object... object作为参数最好了.
[quote]
public void vararg(Object... object) {
for (Object o : object) {
System.out.println("the object value is: " +o.toString());
}
}
[/quote]
//调用
[quote]
Integer[] i = {1,2,3};[color=blue]//只能用Integer,如果用int,print不出来具体的值。。。[/color]
String[] str = {"A","B","C"};
ObjectB b = new ObjectB();
b.vararg(i);
b.vararg(str);
[/quote]
结果
[quote]
//Integer类型
the object value is: 1
the object value is: 2
the object value is: 3
//String类型
the object value is: A
the object value is: B
the object value is: C
[/quote]
还有一个情况出现...例如
[quote]
String[] str = {"A","B","C"};
System.out.printf("the array values are: %s " , str);
[/quote]
输出是:
[quote]
the array values are: A
[/quote]
因为只会取str的第一个元素的值...可以这样写
[quote]
System.out.printf("the array values are: %s " ,(Object)str);
[/quote]
如何创建一个可变长度的参数,看代码:
[quote]
public void vararg(String varOne, String varTwo, String...strings ) {}
[/quote]
编译器会把它解析为"public void vararg(String varOne, String varTwo, String[] strings) {}",将"..."创建成一个<argument type>的array。
调用很简单...(零或以上多个参数)
[quote]
vararg("one","tow");[color=blue] //可以不传参数[/color]
vararg("one","tow","three"); [color=blue]//可以传入一个参数[/color]
vararg("one","tow","three",four); [color=blue]//可以传入多个参数[/color]
[/quote]
当然,也可以传入一个数组作为参数,如:
[quote]
public void vararg(int... i) {
for (int ivalue : i) {
System.out.println("the i value is: " +ivalue);
}
}
[/quote]
[quote]
//调用
int[] i = {1,2,3,4,5,6};
new ObjectB().vararg(i);
[/quote]
输出
[quote]
the i value is: 1
the i value is: 2
the i value is: 3
the i value is: 4
the i value is: 5
the i value is: 6
[/quote]
当然,如果是接受到一个零长度的list,最好做一个判断,可以抛出IllegalArgumentException异常。
[color=blue]But,有些限制:
1.一个方法只能有一个可变参数(一个省略号)
2.省略号只能写在方法参数列表的最后一个。[/color]
迭代可变参数List
将vararg当array来使用...如:
[quote]
public void vararg(String...strings ) {
for (String str : strings) {
System.out.println("the vararg value is: " +str);
}
}
[/quote]
输出
[quote]
the vararg value is: One
the vararg value is: Two
the vararg value is: Three
[/quote]
也可以将可变参数存在变量中...
[quote]
public void vararg(String...strings ) {
String[] arr = strings;[color][color=blue]//存在数组当中,因为自动将String... strings转成String[] strings.[/color]
List list = Arrays.asList(strings);[color=blue]//存在list当中[/color]
}
[/quote]
由于Tiger是autoboxing和auto-unboxing,所以,当我们需要使用primitive参数的时候,我们也可以在Method中使用wrapper类型,由于wrapper都是Object类型,因此用Object... object作为参数最好了.
[quote]
public void vararg(Object... object) {
for (Object o : object) {
System.out.println("the object value is: " +o.toString());
}
}
[/quote]
//调用
[quote]
Integer[] i = {1,2,3};[color=blue]//只能用Integer,如果用int,print不出来具体的值。。。[/color]
String[] str = {"A","B","C"};
ObjectB b = new ObjectB();
b.vararg(i);
b.vararg(str);
[/quote]
结果
[quote]
//Integer类型
the object value is: 1
the object value is: 2
the object value is: 3
//String类型
the object value is: A
the object value is: B
the object value is: C
[/quote]
还有一个情况出现...例如
[quote]
String[] str = {"A","B","C"};
System.out.printf("the array values are: %s " , str);
[/quote]
输出是:
[quote]
the array values are: A
[/quote]
因为只会取str的第一个元素的值...可以这样写
[quote]
System.out.printf("the array values are: %s " ,(Object)str);
[/quote]