黑马程序员技术交流社区
标题:
一个关于可变参数方法重载的问题
[打印本页]
作者:
刘正祥
时间:
2013-5-28 22:49
标题:
一个关于可变参数方法重载的问题
本帖最后由 刘正祥 于 2013-5-29 19:18 编辑
Java中参数个数和类型未知的场合中,用到了可变参数,下面一段代码有关可变参数方法重载,如下:
public class OverloadingVarargs{
static void method(Character... args){
System.out.print("first");
for(Character c: args){
System.out.print(" "+c);
}
System.out.println();
}
static void method(Integer... args){
System.out.print("second");
for(Integer i: args){
System.out.print(" "+i);
}
System.out.println();
}
static void method(Character... args){
System.out.print("third");
}
public static void main(String[] args){
method('a','b','c');
method(1);
method(2,1);
method(0);
method(0L);
}
}
/* 输出结果:
first a b c
second 1
second 2 1
second 0
third
*/
复制代码
但是在使用的时候如果调用Method(),编译器会调用哪一个方法呢?因为可变参数的个数是0....*,如何解决此问题?
作者:
神之梦
时间:
2013-5-28 23:03
可变参数是??学习中。。。。。。。。。
作者:
tshch1989
时间:
2013-5-28 23:17
可变参数的本质是自动封装成一个数组,那么你可以传递一个像这样的参数String[].class;这样就行啦
作者:
刘正祥
时间:
2013-5-29 12:15
tshch1989 发表于 2013-5-28 23:17
可变参数的本质是自动封装成一个数组,那么你可以传递一个像这样的参数String[].class;这样就行啦 ...
这样就能知道调用了哪个method()方法了么?我说的是无参的啊!
作者:
tshch1989
时间:
2013-5-29 12:43
你的类中没有无参的Method()方法,会报错的,你累中都是可变参数的参数类型,都是有参数的,下面是我列出的如何给可变数组传一个空参数:
public class OverloadingVarargs{
static void method(Character... args){
System.out.print("first");
for(Character c: args){
System.out.print(" "+c);
}
System.out.println();
}
static void method(Integer... args){
System.out.print("second");
for(Integer i: args){
System.out.print(" "+i);
}
System.out.println();
}
public static void main(String[] args){
method('a','b','c');
method(1);
method(2,1);
method(0);
method(new Integer[]{});//空参数的可变数组传递举列
// method();//The method method(Character[]) is ambiguous for the type OverloadingVarargs
}
}
作者:
袁梦希
时间:
2013-5-29 17:09
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2