黑马程序员技术交流社区

标题: 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