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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗利华 中级黑马   /  2012-12-31 23:04  /  2368 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 修心者 于 2013-1-4 14:01 编辑

Java可变参数实现的原理是什么,能模拟下源代码吗,

6 个回复

倒序浏览
public void method(String... arg1);  
调用method1时候,参数的数量是可变的,
method("1","2","3")。注意可变参数只能是最后一个参数。
JAVA内部是把这样的参数看成一个数组来处理。在获取多个参数的时候可以用数组遍历来完成。

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1

查看全部评分

回复 使用道具 举报
在动态语言,如ruby中,可以实现可变参数

Ruby代码  
1.def test(* arg)  
2.   for s in arg  
3.     puts s,s.class  
4.   end  
5.end  
6.  
7.test(1,"2",2.3)  

只需在参数前加一个*即可。
调用方法时,可以传入任意数量,任意类型的参数了。
一直以为可变参数是动态语言的特性呢。
最近才发现,java里原来也可以实现可变参数。
SE5之前,我们如果想实现可变参数的效果,可以通过一个数组或Collection
  
1.public static void test(String [] args){  
2.   for (int i = 0; i < args.length; i++) {  
3.      System.out.println(args[i]);  
4.   }  
5.}  

  如果是想不同类型的参数一起传,可以使用Collection,例如List等。
  在SE5之后,java添加了这个新功能。也很简单。 只用三个点号(...)
  
1.   public static void test(int ...objects){  
2.       //参数都是int类型的,所以可以用foreach  
3.for (int object : objects) {  
4.   System.out.println(object);  
5.}  
6.   }  
7.   public static void main(String [] args){  
8.       test();  
9.       test(1);  
10.       test(1,2,3,4,5);  
11.   }  
12.   

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1

查看全部评分

回复 使用道具 举报
 java1.5增加了新特性:可变参数。适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项
  Java代码
  public class uuid {
  private static int count=0;
  /**
  * @param args
  */
  public static void main(String[] args) {
  get("1",new Object[]{"1","2","3"});
  }
  public  static  void  get(String s,Object... vaule){
  for (Object p:vaule){
  System.out.println(p);
  }
  }
  }

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1 鼓励一下,多上论坛活动

查看全部评分

回复 使用道具 举报
王少雷 发表于 2012-12-31 23:23
public void method(String... arg1);  
调用method1时候,参数的数量是可变的,
method("1","2","3")。注 ...

好像懂了,感谢,
回复 使用道具 举报

RE: java可变参数

希望的曙光 发表于 2013-1-1 05:42
在动态语言,如ruby中,可以实现可变参数

Ruby代码  

嗯,谢了,
回复 使用道具 举报
郝福明 发表于 2013-1-1 09:21
 java1.5增加了新特性:可变参数。适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。 ...

ok,thank you,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马