黑马程序员技术交流社区

标题: 一个关于可变参数方法重载的问题 [打印本页]

作者: 刘正祥    时间: 2013-5-28 22:49
标题: 一个关于可变参数方法重载的问题
本帖最后由 刘正祥 于 2013-5-29 19:18 编辑

Java中参数个数和类型未知的场合中,用到了可变参数,下面一段代码有关可变参数方法重载,如下:
  1. public class OverloadingVarargs{
  2.     static void method(Character... args){
  3.         System.out.print("first");
  4.         for(Character c: args){
  5.             System.out.print(" "+c);
  6.         }
  7.         System.out.println();
  8.     }
  9.     static void method(Integer... args){
  10.         System.out.print("second");
  11.         for(Integer i: args){
  12.             System.out.print(" "+i);
  13.         }
  14.         System.out.println();
  15.     }
  16.     static void method(Character... args){
  17.         System.out.print("third");
  18.     }
  19.     public static void main(String[] args){
  20.         method('a','b','c');
  21.         method(1);
  22.         method(2,1);
  23.         method(0);
  24.         method(0L);
  25.     }
  26. }
  27. /* 输出结果:
  28.    first a b c
  29.    second 1
  30.    second 2 1
  31.    second 0
  32.    third
  33. */

复制代码
但是在使用的时候如果调用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