java里实现可变参数。

最近才发现,java里原来也可以实现可变参数。
SE5之前,我们如果想实现可变参数的效果,可以通过一个数组或Collection
    public static void test(String [] args){
       for (int i = 0; i < args.length; i++) {
          System.out.println(args[i]);
       }
    }

如果是想不同类型的参数一起传,可以使用Collection,例如List等。
  在SE5之后,java添加了这个新功能。也很简单。 只用三个点号(...)

      public static void test(int ...objects){
        //参数都是int类型的,所以可以用foreach
	for (int object : objects) {
	   System.out.println(object);
	}
    }
    public static void main(String [] args){
        test();
        test(1);
        test(1,2,3,4,5);
    }

 
  参数类型可以是Object的。
  另外,如同ruby中一样,可变参数可以与固定的参数相结合,不过需要注意的是,如果结合使用,那么可变参数必须卸载最后面。
     public static void test(String str,Object ...objects){
	  System.out.println("str="+str);
	  for(Object obj : objects){
		System.out.println(obj);
	  }
      }
      public static void main(String [] args){
        test("abc");
        test("abc",1,"abc",88.8f);
      }

 

另外,一个方法中,只能定义一个可变参数!
  知道了这个特性以后,以后可以在项目中使用了,应该会带来一些方便。
  下面,让我们来看看具体使用的例子。
  在Collections类的addAll方法中
    /* 
     * ...
     * @since 1.5
     */
    public static <T> boolean addAll(Collection<? super T> c, T... elements) {
        boolean result = false;
        for (T element : elements)
            result |= c.add(element);
        return result;
    }


  采用了范型,所以可变参数的类型也可以使任意类型的。
  来看个例子
    public static void main(String [] args){
       Collection col = new LinkedList();	
       boolean flag = Collections.addAll(col, 123,123.0f,888.0,"float",'c');
       for(Iterator ite = col.iterator();ite.hasNext();){
	   Object obj = ite.next();
	   System.out.print(obj.getClass().getName());
	   System.out.println("   "+obj);
       }
    }



  不加范型,参数可以是任意类型的
  加上范型,参数类型即可指定
    public static void main(String [] args){
       Collection<String> col = new LinkedList<String>();	
       boolean flag = Collections.addAll(col,"int","float","string","123","char");
       for(Iterator ite = col.iterator();ite.hasNext();){
	   Object obj = ite.next();
	   System.out.println("   "+obj);
       }
    }

 
 
 

你可能感兴趣的:(java,C++,c,C#,Ruby)