黑马程序员技术交流社区

标题: java可变参数 [打印本页]

作者: 罗利华    时间: 2012-12-31 23:04
标题: java可变参数
本帖最后由 修心者 于 2013-1-4 14:01 编辑

Java可变参数实现的原理是什么,能模拟下源代码吗,
作者: 王少雷    时间: 2012-12-31 23:23
public void method(String... arg1);  
调用method1时候,参数的数量是可变的,
method("1","2","3")。注意可变参数只能是最后一个参数。
JAVA内部是把这样的参数看成一个数组来处理。在获取多个参数的时候可以用数组遍历来完成。
作者: 希望的曙光    时间: 2013-1-1 05:42
在动态语言,如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.   

作者: 郝福明    时间: 2013-1-1 09:21
 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);
  }
  }
  }
作者: 罗利华    时间: 2013-1-4 13:55
王少雷 发表于 2012-12-31 23:23
public void method(String... arg1);  
调用method1时候,参数的数量是可变的,
method("1","2","3")。注 ...

好像懂了,感谢,
作者: 罗利华    时间: 2013-1-4 13:56
标题: RE: java可变参数
希望的曙光 发表于 2013-1-1 05:42
在动态语言,如ruby中,可以实现可变参数

Ruby代码  

嗯,谢了,
作者: 罗利华    时间: 2013-1-4 13:57
郝福明 发表于 2013-1-1 09:21
 java1.5增加了新特性:可变参数。适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。 ...

ok,thank you,,,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2