A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘正祥 中级黑马   /  2013-5-28 22:49  /  1276 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘正祥 于 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....*,如何解决此问题?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
回复 使用道具 举报
你的类中没有无参的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
    }
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
tshch1989 发表于 2013-5-28 23:17
可变参数的本质是自动封装成一个数组,那么你可以传递一个像这样的参数String[].class;这样就行啦 ...

这样就能知道调用了哪个method()方法了么?我说的是无参的啊!
回复 使用道具 举报
可变参数的本质是自动封装成一个数组,那么你可以传递一个像这样的参数String[].class;这样就行啦
回复 使用道具 举报
可变参数是??学习中。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马