黑马程序员技术交流社区
标题:
java反射机制 如何给不定参数invoke
[打印本页]
作者:
曾辉
时间:
2012-2-3 16:01
标题:
java反射机制 如何给不定参数invoke
比如
public void add(int... nums){
}
这样的参数用反射如何赋值呢?
作者:
梅雄新
时间:
2012-2-3 20:59
可变参数的方法反射可将可变参数封装成一个数组,再按照一个参数时的反射来调即可
public void add(int... nums){}的反射即可写成
Method methodAdd =类.class.getMethod("add",int[].class) ;
methodAdd.invoke(对象,new int[]{1,2,3,4,5});
下面是我测试通过的例子。楼主可试试
package gz.com;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectDemo1 {
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
{
Demo1 demo1 = new Demo1();
demo1.add(1,2,3,4,5);
Method methodAdd = Demo1.class.getMethod("add", int[].class);
methodAdd.invoke(demo1, new int[]{1,2,3,4});
}
}
class Demo1
{
public void add(int... nums)
{
int sum = 0;
for(int i=0;i<nums.length;i++)
{
sum =sum+nums[i];
}
System.out.println(sum);
}
}
作者:
周吉明
时间:
2012-2-3 21:06
用反射调用可变参数的函数就是传入一个数组作参数。
在网上找到的一个例子:
public class Test{
public static void main(String args[])throws Exception{
Arg arg = new Arg();
for(Method method : arg.getClass().getMethods())
{
if(method.getName().equals("many"))//找到我们要用的方法
{
Object[] param = new Object[1];
param[0] = new String[]{"hello"};
System.out.println(method.invoke(arg, param));
}
}
}
}
class Arg extends Thread{
public String many(Object... args)
{
if(args!=null && args.length>0)
return args[0].toString();
return "test";
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2