Java新特性之-可变参数(Varargs)
注意:仅仅是参数的个数不确定,并不是参数的类型不确定!!注意了!!!!
可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象, util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3); …
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) { for (Object obj: objs)
System.out.println(obj); }
在引入可变参数以后,Java的反射包也更加方便使用了。对于c.getMethod(\"test\Object[0]).invoke(c.newInstance(), new Object[0])),
现在我们可以这样写了c.getMethod(\"test\").invoke(c.newInstance()),这样的代码比原来清楚了很多。
--------------------------------------- 定义:
public int sum(int... n) { //传过来n为一个int型数组
int tempSum;
for(int option : n) { tempSum+=option; } /*
for(int i = 0; i < n.length; i++) { tempSum+=n[i]; } */
return tempSum; }
调用1: sum(1); 调用2: sum(1,2); 调用3: sum(1,2,3,4);
--------------------------------------- 有时候,我们传入到方法的参数的个数是不固定的,为了解决这个问题,我们一般采用下面的方法:
1. 重载,多重载几个方法,尽可能的满足参数的个数。显然这不是什么好办法。
2. 将参数作为一个数组传入。虽然这样我们只需一个方法即可,但是,为了传递这个数组,我们需要先声明一个数组,然后将参数一个一个加到数组中。
现在,我们可以使用可变长参数解决这个问题。
声明可变长参数方式如下:
public void mymethod(String arg1,Object… args)
也就是使用…将参数声明成可变长参数。
显然,可变长参数必须是最后一个参数。
请看下面唐僧师傅给悟空讲佛经的例子:
package com.kuaff.jdk5;
public class Varargs1 {
public void speak(String name,Object... arguments)
{
for(Object object : arguments)
{
System.out.println(object);
}
}
public static void main(String[] args)
{
Varargs1 va = new Varargs1();
va.speak(\"悟空\人和妖精都是妈生的,\");
va.speak(\"悟空\不同的人是人他妈生的,\妖是妖他妈生的,\");
} }